Opções avançadas do compilador C#

As opções a seguir dão suporte a cenários avançados. A nova sintaxe do MSBuild é mostrada em negrito. A sintaxe mais antiga csc.exe é mostrada em code style .

  • MainEntryPoint, StartupObject / -main : especifica o tipo que contém o ponto de entrada.
  • PdbFile / -pdb : especifique o nome do arquivo de informações de depuração.
  • PathMap / -pathmap : especifique um mapeamento para a saída de nomes de caminho de origem pelo compilador.
  • ApplicationConfiguration / -appconfig : especifique um arquivo de configuração de aplicativo que contenha configurações de associação de assembly.
  • AdditionalLibPaths / -lib : especifique diretórios adicionais para pesquisar em busca de referências.
  • GenerateFullPaths / -fullpath : o compilador gera caminhos totalmente qualificados.
  • PreferredUILang / -preferreduilang : especifique o nome de idioma de saída preferencial.
  • BaseAddress / -baseaddress : especifique o endereço base para a biblioteca a ser criada.
  • / ChecksumAlgorithm -checksumalgorithm : Especifique o algoritmo para calcular a soma de verificação do arquivo de origem armazenado em PDB.
  • Página de código / -codepage : Especifique a página de código a ser usada ao abrir os arquivos de origem.
  • Utf8output / -utf8output : mensagens do compilador de saída em codificação UTF-8.
  • Alinhamento / -filealign de File: especifique o alinhamento usado para as seções do arquivo de saída.
  • ErrorEndLocation / -errorendlocation : linha de saída e coluna do local final de cada erro.
  • NoStandardLib: / -nostdlib não referencia a ** biblioteca padrãomscorlib.dll.
  • SubsystemVersion: / -subsystemversion especifique a versão do subsistema deste assembly.
  • ModuleAssemblyName: o nome do assembly do que este / -moduleassemblyname módulo fará parte.

MainEntryPoint ou StartupObject

Essa opção especifica a classe que contém o ponto de entrada para o programa, se mais de uma classe contiver um Main método .

<StartupObject>MyNamespace.Program</StartupObject>

ou

<MainEntryPoint>MyNamespace.Program</MainEntryPoint>

Em Program que é o tipo que contém o método Main . O nome de classe informado deve ser totalmente qualificado. Ele deve incluir o namespace completo que contém a classe, seguido do nome de classe. Por exemplo, quando o método Main é localizado dentro da classe Program no namespace MyApplication.Core, a opção do compilador deve ser -main:MyApplication.Core.Program. Se a compilação incluir mais de um tipo com um Main método, você poderá especificar qual tipo contém o Main método .

Observação

Essa opção não pode ser usada para um projeto que inclui instruções de nível superior,mesmo que esse projeto contenha um Main ou mais métodos.

PdbFile

A opção do compilador PdbFile especifica o nome e o local do arquivo de símbolos de depuração. O filename valor especifica o nome e o local do arquivo de símbolos de depuração.

<PdbFile>filename</PdbFile>

Quando você especificar DebugType, o compilador criará um arquivo .pdb no mesmo diretório em que o compilador criará o arquivo de saída (.exe ou .dll). O arquivo .pdb tem o mesmo nome de arquivo base que o nome do arquivo de saída. PdbFile permite que você especifique um nome de arquivo não padrão e um local para o arquivo .pdb. Essa opção do compilador não pode ser definida no ambiente de desenvolvimento do Visual Studio nem pode ser alterada por meio de programação.

PathMap

A opção do compilador PathMap especifica como mapear caminhos físicos para nomes de caminho de origem saída pelo compilador. Essa opção mapeia cada caminho físico no computador em que o compilador é executado para um caminho correspondente que deve ser gravado nos arquivos de saída. No exemplo a seguir, é o caminho completo para os arquivos de origem no ambiente atual e é o caminho de origem substituído path1 por em qualquer arquivo de sourcePath1 path1 saída. Para especificar vários caminhos de origem mapeados, separe cada um com um ponto e vírgula.

<PathMap>path1=sourcePath1;path2=sourcePath2</PathMap>

O compilador grava o caminho de origem em sua saída pelos seguintes motivos:

  1. O caminho de origem é substituído por um argumento quando o CallerFilePathAttribute é aplicado a um parâmetro opcional.
  2. O caminho de origem é inserido em um arquivo PDB.
  3. O caminho do arquivo PDB é inserido em um arquivo PE (executável portátil).

ApplicationConfiguration

A opção do compilador ApplicationConfiguration permite que um aplicativo C# especifique o local do arquivo de configuração de aplicativo (app.config) de um assembly para o CLR (Common Language Runtime) no momento da associação do assembly.

<ApplicationConfiguration>file</ApplicationConfiguration>

Em file que é o arquivo de configuração do aplicativo que contém as configurações de associação de assembly. Um uso de ApplicationConfiguration é um cenário avançado no qual um assembly tem que referenciar a versão .NET Framework e o .NET Framework para a versão Silverlight de um determinado assembly de referência ao mesmo tempo. Por exemplo, um designer XAML gravado no Windows Presentation Foundation (WPF) pode ter que referenciar a Área de Trabalho do WPF, para a interface do usuário do designer e o subconjunto do WPF incluído no Silverlight. O mesmo assembly do designer deve acessar ambos os assemblies. Por padrão, as referências separadas causam um erro do compilador, pois a associação de assembly considera os dois assemblies equivalentes. A opção de compilador ApplicationConfiguration permite que você especifique o local de um arquivo de app.config que desabilita o comportamento padrão usando uma <supportPortability> marca, conforme mostrado no exemplo a seguir.

<supportPortability PKT="7cec85d7bea7798e" enable="false"/>

O compilador passa o local do arquivo para a lógica de associação de assembly do CLR.

Observação

Para usar o arquivo de app.config que já está definido no projeto, adicione a marca de propriedade <UseAppConfigForCompiler> ao arquivo . csproj e defina seu valor como true . Para especificar um arquivo app.config diferente, adicione a marca de propriedade <AppConfigForCompiler> e defina seu valor para o local do arquivo.

O exemplo a seguir mostra um arquivo app.config que habilita um aplicativo a referenciar as implementações do .NET Framework e do .NET Framework para Silverlight de qualquer assembly do .NET Framework que exista em ambas as implementações. A opção de compilador ApplicationConfiguration especifica o local desse app.config arquivo.

<configuration>
  <runtime>
    <assemblyBinding>
      <supportPortability PKT="7cec85d7bea7798e" enable="false"/>
      <supportPortability PKT="31bf3856ad364e35" enable="false"/>
    </assemblyBinding>
  </runtime>
</configuration>

AdditionalLibPaths

A opção AdditionalLibPaths especifica o local dos assemblies referenciados com a opção References .

<AdditionalLibPaths>dir1[,dir2]</AdditionalLibPaths>

Em que dir1 é um diretório para o compilador examinar se um assembly referenciado não for encontrado no diretório de trabalho atual (o diretório do qual você está invocando o compilador) ou no diretório do sistema do Common Language Runtime. dir2 é um ou mais diretórios adicionais a serem pesquisados para referências de assembly. Separe os nomes de diretório com uma vírgula e sem espaço em branco entre eles. O compilador procura referências de assembly que não são totalmente qualificadas na seguinte ordem:

  1. Diretório de trabalho atual.
  2. O diretório de sistema do Common Language Runtime.
  3. Diretórios especificados por AdditionalLibPaths.
  4. Diretórios especificados pela variável de ambiente LIB.

Use a referência para especificar uma referência de assembly. AdditionalLibPaths é aditivo. Especificá-lo mais de uma vez para os valores anteriores. Como o caminho para o assembly dependente não é especificado no manifesto do assembly, o aplicativo encontrará e usará o assembly no cache de assembly global. O compilador que faz referência ao assembly não implica que o Common Language Runtime possa localizar e carregar o assembly em tempo de execução. Consulte Como o tempo de execução localiza assemblies para obter detalhes sobre como o runtime pesquisa assemblies referenciados.

GenerateFullPaths

A opção GenerateFullPaths faz com que o compilador especifique o caminho completo para o arquivo ao listar erros de compilação e avisos.

<GenerateFullPaths>true</GenerateFullPaths>

Por padrão, erros e avisos oriundos da compilação especificam o nome do arquivo no qual o erro foi encontrado. A opção GenerateFullPaths faz com que o compilador especifique o caminho completo para o arquivo. Essa opção do compilador não está disponível no Visual Studio e não pode ser alterada programaticamente.

PreferredUILang

Usando a opção do compilador PreferredUILang, você pode especificar a linguagem na qual o compilador C# exibe a saída, como mensagens de erro.

<PreferredUILang>language</PreferredUILang>

Em language que é o nome de idioma do idioma a ser usado para a saída do compilador. Você pode usar a opção do compilador PreferredUILang para especificar a linguagem que deseja que o compilador C# use para mensagens de erro e outra saída de linha de comando. Se o pacote de idiomas para o idioma não estiver instalado, a configuração de idioma do sistema operacional será usada.

BaseAddress

A opção BaseAddress permite especificar o endereço base preferencial no qual carregar uma DLL. Para obter mais informações sobre quando e por que usar essa opção, consulte o Blog do Larry Osterman.

<BaseAddress>address</BaseAddress>

Em address que é o endereço base para a DLL. Esse endereço pode ser especificado como um número decimal, hexadecimal ou octal. O endereço base padrão para uma DLL é definido pelo Common Language Runtime do .NET. A palavra de ordem inferior nesse endereço será arredondada. Por exemplo, se você especificar 0x11110001 , ele será arredondado para 0x11110000 . Para concluir o processo de assinatura de uma DLL, use SN.EXE com a opção -R.

ChecksumAlgorithm

Essa opção controla o algoritmo de verificação que usamos para codificar arquivos de origem no PDB.

<ChecksumAlgorithm>algorithm</ChecksumAlgorithm>

O algorithm deve ser SHA1 (padrão) ou SHA256 .

CodePage

Essa opção especifica qual página de código usar durante a compilação se a página necessária não for a página de código padrão atual para o sistema.

<CodePage>id</CodePage>

Em id que é a ID da página de código a ser usada para todos os arquivos de código-fonte na compilação. O compilador tentará primeiro interpretar todos os arquivos de origem como UTF-8. Se os arquivos de código-fonte estão em uma codificação diferente de UTF-8 e usam caracteres diferentes de caracteres ASCII de 7 bits, use a opção CodePage para especificar qual página de código deve ser usada. CodePage se aplica a todos os arquivos de código-fonte em sua compilação. Consulte GetCPInfo para obter informações sobre como localizar quais páginas de código têm suporte do sistema.

Utf8Output

A opção Utf8Output exibe a saída do compilador usando a codificação UTF-8.

<Utf8Output>true</Utf8Output>

Em algumas configurações internacionais, a saída do compilador não pode ser exibida corretamente no console. Use Utf8Output e redirecione a saída do compilador para um arquivo.

FileAlignment

A opção FileAlignment permite especificar o tamanho das seções no arquivo de saída. Os valores válidos são 512, 1024, 2048, 4096 e 8192. Esses valores estão em bytes.

<FileAlignment>number</FileAlignment>

Você define a opção FileAlignment da página avançado das propriedades de compilação para seu projeto no Visual Studio. Cada seção será alinhada em um limite que seja um múltiplo do valor filealign . Não há nenhum padrão fixo. Se FileAlignment não for especificado, o Common Language Runtime escolherá um padrão no momento da compilação. Ao especificar o tamanho da seção, você afeta o tamanho do arquivo de saída. Modificar o tamanho da seção pode ser útil para programas que serão executados em dispositivos menores. Use DUMPBIN para ver informações sobre as seções em seu arquivo de saída.

ErrorEndLocation

Instrui o compilador a produzir a linha e a coluna de saída do local final de cada erro.

<ErrorEndLocation>filename</ErrorEndLocation>

Por padrão, o compilador grava o local inicial na origem para todos os erros e avisos. Quando essa opção é definida como true, o compilador grava o local inicial e final para cada erro e aviso.

NoStandardLib

NoStandardLib impede a importação de mscorlib.dll, que define o namespace do sistema inteiro.

<NoStandardLib>true</NoStandardLib>

Use essa opção se desejar definir ou criar seus próprios objetos e namespace System. Se você não especificar NoStandardLib, mscorlib.dll será importado para o programa (o mesmo que especificar <NoStandardLib>false</NoStandardLib> ).

SubsystemVersion

Especifica a versão mínima do subsistema no qual o arquivo executável é executado. Normalmente, essa opção garante que o arquivo executável possa usar recursos de segurança que não estão disponíveis com versões mais antigas do Windows.

Observação

Para especificar o subsistema em si, use a opção de compilador TargetType .

<SubsystemVersion>major.minor</SubsystemVersion>

O major.minor especifica a versão mínima necessária do subsistema, conforme expresso em uma notação de ponto para as versões principal e secundária. Por exemplo, você pode especificar que um aplicativo não pode ser executado em um sistema operacional mais antigo do que o Windows 7. Defina o valor dessa opção como 6, 1, pois a tabela mais adiante neste artigo descreve. Você especifica os valores de major e minor como inteiros. Zeros à esquerda na versão minor não alteram a versão, mas zeros à direita alteram. Por exemplo, 6.1 e 6.01 se referem à mesma versão, mas 6.10 se refere a uma versão diferente. É recomendável expressar a versão secundária como dois dígitos para evitar confusão.

A seguinte tabela lista as versões de subsistema comuns do Windows.

Versão do Windows Versão do subsistema
Windows Server 2003 5,02
Windows Vista 6,00
Windows 7 6.01
Windows Server 2008 6.01
Windows 8 6.02

O valor padrão da opção de compilador SubsystemVersion depende das condições na lista a seguir:

  • O valor padrão é 6.02 se qualquer opção do compilador na lista a seguir for definida:
  • O valor padrão será 6.00 se você estiver usando o MSBuild, se tiver como destino o .NET Framework 4.5 e se não definiu nenhuma das opções de compilador que foram especificadas anteriormente na lista.
  • O valor padrão será 4,00 se nenhuma das condições anteriores for verdadeira.

ModuleAssemblyName

Especifica o nome de um assembly cujos tipos não públicos um .netmodule pode acessar.

<ModuleAssemblyName>assembly_name</ModuleAssemblyName>

ModuleAssemblyName deve ser usado ao criar um .netmodule e onde as seguintes condições são verdadeiras:

  • O .netmodule precisa de acesso a tipos não públicos em um assembly existente.
  • Você sabe o nome do assembly no qual o .netmodule será compilado.
  • O assembly existente concedeu acesso de assembly amigo ao assembly no qual o . netmodule será criado.

Para obter mais informações sobre como criar um .netmodule, consulte a opção TargetType do módulo. Para obter mais informações sobre assemblies amigos, consulte Assemblies Amigáveis.