Opções avançadas do compilador C#

As opções a seguir oferecem 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: especifique 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 nomes de caminho de origem gerados pelo compilador.
  • ApplicationConfiguration / -appconfig: especifique um arquivo de configuração do aplicativo contendo as configurações de vinculação de assembly.
  • AdditionalLibPaths / -lib: especifique diretórios adicionais para pesquisar referências.
  • GenerateFullPaths / -fullpath: O compilador gera caminhos totalmente qualificados.
  • PreferredUILang / -preferreduilang: especifique o nome do idioma de saída preferido.
  • BaseAddress / -baseaddress: especifique o endereço base para a biblioteca a ser construída.
  • ChecksumAlgorithm / -checksumalgorithm : Especifique o algoritmo para calcular a soma de verificação do arquivo de origem armazenado no PDB.
  • CodePage / -codepage: especifique a página de código a ser usada ao abrir arquivos de código-fonte.
  • Utf8Output / -utf8output: Mensagens do compilador de saída na codificação UTF-8.
  • FileAlignment / -filealign: 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 faça referência a bibliotecas padrão mscorlib.dll.
  • SubsystemVersion / -subsystemversion: Especifique a versão do subsistema deste assembly.
  • ModuleAssemblyName / -moduleassemblyname: Nome do assembly do qual este módulo fará parte.
  • ReportIVTs-reportivts / : Produzir informações adicionais sobre System.Runtime.CompilerServices.InternalsVisibleToAttribute informações.

Você adiciona qualquer uma destas opções em um <PropertyGroup> elemento em seu *.csproj arquivo:

<PropertyGroup>
    <StartupObject>...</StartupObject>
    ...
</PropertyGroup>

MainEntryPoint ou StartupObject

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

<StartupObject>MyNamespace.Program</StartupObject>

ou

<MainEntryPoint>MyNamespace.Program</MainEntryPoint>

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

Nota

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

Arquivo Pdb

A opção de 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ê especifica DebugType, o compilador cria um arquivo .pdb no mesmo diretório onde o compilador cria 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 local para o arquivo .pdb. Essa opção de compilador não pode ser definida no ambiente de desenvolvimento do Visual Studio, nem pode ser alterada programaticamente.

Mapa de Caminhos

Nota

Especificar PathMap impedirá que os pontos de interrupção funcionem em compilações de depuração locais. Defina apenas PathMap para compilações de produção ou integração contínua.

A opção de compilador PathMap especifica como mapear caminhos físicos para nomes de caminho de origem enviados pelo compilador. Esta opção mapeia cada caminho físico na máquina onde o compilador é executado para um caminho correspondente que deve ser escrito nos arquivos de saída. No exemplo a seguir, path1 é o caminho completo para os arquivos de origem no ambiente atual e sourcePath1 é o caminho de origem substituído em path1 todos os arquivos de saída. Para especificar vários caminhos de origem mapeados, separe cada um com uma 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 é incorporado em um arquivo PDB.
  3. O caminho do arquivo PDB é incorporado 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 do aplicativo (app.config) de um assembly para o Common Language Runtime (CLR) no momento da vinculação do assembly.

<ApplicationConfiguration>file</ApplicationConfiguration>

Onde file é o arquivo de configuração do aplicativo que contém as configurações de vinculação de assembly. Um uso de ApplicationConfiguration são cenários avançados nos quais um assembly precisa fazer referência à versão do .NET Framework e à versão do .NET Framework para Silverlight de um assembly de referência específico ao mesmo tempo. Por exemplo, um designer XAML escrito no Windows Presentation Foundation (WPF) pode ter que fazer referência ao WPF Desktop, para a interface do usuário do designer, e ao subconjunto do WPF incluído no Silverlight. O mesmo assembly de designer tem que acessar ambos os assemblies. Por padrão, as referências separadas causam um erro de compilador, porque a vinculação de assembly vê os dois assemblies como equivalentes. A opção do compilador ApplicationConfiguration permite especificar o local de um arquivo app.config que desabilita o comportamento padrão usando uma <supportPortability> tag , conforme mostrado no exemplo a seguir.

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

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

Nota

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

O exemplo a seguir mostra um arquivo app.config que permite que um aplicativo tenha referências à implementação do .NET Framework e à implementação do .NET Framework for Silverlight de qualquer assembly do .NET Framework que exista em ambas as implementações. A opção de compilador ApplicationConfiguration especifica o local desse arquivo app.config.

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

AdicionalLibPaths

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

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

Onde dir1 é um diretório para o compilador procurar 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 para procurar referências de assembly. Separe os nomes dos diretórios 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 do sistema Common Language Runtime.
  3. Diretórios especificados por AdditionalLibPaths.
  4. Diretórios especificados pela variável de ambiente LIB.

Use Reference para especificar uma referência de assembly. AdditionalLibPaths é aditivo. Especificando-o mais de uma vez acrescenta a quaisquer valores anteriores. Como o caminho para o assembly dependente não é especificado no manifesto do assembly, o aplicativo localizará e usará o assembly no cache global do assembly. 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 tempo de execução procura assemblies referenciados.

GenerateFullPaths

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

<GenerateFullPaths>true</GenerateFullPaths>

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

PreferredUILang

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

<PreferredUILang>language</PreferredUILang>

Onde language é o nome do idioma a ser usado para a saída do compilador. Você pode usar a opção de compilador PreferredUILang para especificar a linguagem que deseja que o compilador C# use para mensagens de erro e outras saídas 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.

Endereço Base

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 WebLog de Larry Osterman.

<BaseAddress>address</BaseAddress>

Onde address é o endereço base para a DLL. Este endereço pode ser especificado como um número decimal, hexadecimal ou octal. O endereço base padrão para uma DLL é definido pelo .NET common language runtime. A palavra de ordem inferior neste 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

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

<ChecksumAlgorithm>algorithm</ChecksumAlgorithm>

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

Página de código

Esta 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>

Onde id é o ID da página de código a ser usada para todos os arquivos de código-fonte na compilação. O compilador primeiro tenta interpretar todos os arquivos de origem como UTF-8. Se seus arquivos de código-fonte estiverem em uma codificação diferente de UTF-8 e usarem 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 encontrar quais páginas de código são suportadas em seu sistema.

Utf8Saída

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 na página Avançado das propriedades Build para seu projeto no Visual Studio. Cada seção é alinhada em um limite que é um múltiplo do valor FileAlignment . Não há nenhum padrão fixo. Se FileAlignment não for especificado, o common language runtime selecionará um padrão em tempo de 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 executados em dispositivos menores. Use DUMPBIN para ver informações sobre seções em seu arquivo de saída.

ErrorEndLocation

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

<ErrorEndLocation>true</ErrorEndLocation>

Por padrão, o compilador grava o local inicial no código-fonte 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 todo o namespace System.

<NoStandardLib>true</NoStandardLib>

Use esta opção se quiser definir ou criar seu próprio namespace e objetos do sistema. Se você não especificar NoStandardLib, mscorlib.dll será importado para o seu programa (o mesmo que especificar <NoStandardLib>false</NoStandardLib>).

SubsystemVersion

Especifica a versão mínima do subsistema no qual o arquivo executável é executado. Mais comumente, 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.

Nota

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

<SubsystemVersion>major.minor</SubsystemVersion>

Especificar major.minor a versão mínima exigida do subsistema, expressa numa notação de pontos para as versões principais e secundárias. Por exemplo, você pode especificar que um aplicativo não pode ser executado em um sistema operacional mais antigo que o Windows 7. Defina o valor dessa opção como 6.01, conforme descrito na tabela mais adiante neste artigo. Você especifica os valores para major e minor como inteiros. Os zeros à esquerda na versão não alteram a minor versão, mas os zeros à direita sim. Por exemplo, 6.1 e 6.01 referem-se à mesma versão, mas 6.10 refere-se a uma versão diferente. Recomendamos expressar a versão secundária como dois dígitos para evitar confusão.

A tabela a seguir lista as versões comuns do subsistema do Windows.

Versão do Windows Versão do subsistema
Windows Server 2003 5.02
Windows Vista 6,00
Windows 7 6.01
2008 Windows Server 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 estiver definida:
  • O valor padrão é 6.00 se você estiver usando o MSBuild, estiver direcionando o .NET Framework 4.5 e não tiver definido nenhuma das opções do compilador especificadas anteriormente nesta lista.
  • O valor padrão é 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 forem 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á construído.
  • O assembly existente concedeu acesso ao assembly amigo ao assembly no qual o .netmodule será construído.

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

RelatóriosIVTs

Habilite ou desabilite informações de diagnóstico adicionais sobre System.Runtime.CompilerServices.InternalsVisibleToAttribute encontradas durante a compilação:

<ReportIVTs>true</ReportIVTs>

Os diagnósticos serão habilitados se o conteúdo truedo elemento for , desabilitado se false, ou não estiver presente.

ReportIVTs relata as seguintes informações quando habilitado:

  1. Qualquer diagnóstico de membro inacessível inclui seu assembly de origem, se diferente do assembly atual.
  2. O compilador imprime a identidade do assembly do projeto que está sendo compilado, seu nome de assembly e chave pública.
  3. Para cada referência passada ao compilador, ele imprime;
    1. A identidade do assembly da referência
    2. Se a referência concede o projeto atual InternalsVisibleTo
    3. O nome e todas as chaves públicas de quaisquer assemblies concedidos InternalsVisibleTo a partir deste assembly