Opções do compilador C# que controlam a saída do compilador

As opções a seguir controlam a geração de saída do compilador. a nova sintaxe de MSBuild é mostrada em negrito. A sintaxe de csc.exe mais antiga é mostrada em code style .

  • Documentador / -doc de documentação: gerar arquivo de documento XML a partir de /// comentários.
  • OutputAssembly / -out : especifique o arquivo de assembly de saída.
  • PlatformTarget / -platform : Especifique a CPU da plataforma de destino.
  • ProduceReferenceAssembly / -refout : gerar um assembly de referência.
  • TargetType -target : especifique o tipo do assembly de saída.

DocumentationFile

A opção documentafile permite posicionar comentários de documentação em um arquivo XML. Para saber mais sobre como documentar seu código, confira marcas recomendadas para comentários de documentação. O valor especifica o caminho para o arquivo XML de saída. O arquivo XML contém os comentários nos arquivos de código-fonte da compilação.

<DocumentationFile>path/to/file.xml</DocumentationFile>

O arquivo de código-fonte que contém as instruções principal ou de nível superior é apresentado primeiro no XML. Muitas vezes, você desejará usar o arquivo de .xml gerado com o IntelliSense. O nome de arquivo de .xml deve ser o mesmo que o do assembly. O arquivo de .xml deve estar no mesmo diretório que o assembly. quando o assembly é referenciado em um projeto Visual Studio, o arquivo de .xml também é encontrado. Para obter mais informações sobre como gerar comentários de código, consulte fornecendo comentários de código. A menos que você compile com <TargetType:Module> , file conterá <assembly> e </assembly> marcações especificando o nome do arquivo que contém o manifesto do assembly para o arquivo de saída. Para obter exemplos, consulte como usar os recursos de documentação XML.

Observação

A opção documentafile se aplica a todos os arquivos no projeto. Para desabilitar avisos relacionados aos comentários de documentação para um arquivo ou uma seção específica do código, use #pragma warning.

OutputAssembly

A opção OutputAssembly especifica o nome do arquivo de saída. O caminho de saída especifica a pasta na qual a saída do compilador é colocada.

<OutputAssembly>folder</OutputAssembly>

Especifique o nome completo e a extensão do arquivo que você deseja criar. se você não especificar o nome do arquivo de saída, MSBuild usará o nome do projeto para especificar o nome do assembly de saída. Projetos de estilo antigo usam as seguintes regras:

  • Um .exe usará o nome do arquivo de código-fonte que contém o Main método ou as instruções de nível superior.
  • Um arquivo .dll ou .netmodule extrairá seu nome do primeiro arquivo de código-fonte.

Os módulos produzidos como parte de uma compilação se tornam arquivos associados a qualquer assembly também produzido na compilação. Use ildasm.exe para exibir o manifesto do assembly para ver os arquivos associados.

A opção de compilador OutputAssembly é necessária para que um exe seja o destino de um assembly Friend.

PlatformTarget

Especifica qual versão do CLR pode executar o assembly.

<PlatformTarget>anycpu</PlatformTarget>
  • O anycpu (padrão) compila seu assembly para que ele seja executado em qualquer plataforma. Seu aplicativo será executado como um processo de 64 bits sempre que possível e realizará fallback para 32 bits quando apenas esse modo estiver disponível.
  • anycpu32bitpreferred compila seu assembly para que ele seja executado em qualquer plataforma. Seu aplicativo é executado no modo 32 bits em sistemas que dão suporte para aplicativos de 32 bits e 64 bits. você pode especificar essa opção somente para projetos direcionados .NET Framework 4,5 ou posterior.
  • O ARM compila seu assembly para que ele seja executado em um computador que tem um processador ARM (Advanced RISC Machine).
  • ARM64 compila o assembly para execução pelo CLR de 64 bits em um computador que tem um processador ARM (Máquina RISC Avançada) que dá suporte ao conjunto de instruções A64.
  • x64 compila o assembly para ser executado pelo CLR de 64 bits em um computador que dá suporte ao conjunto de instruções AMD64 ou EM64T.
  • x86 compila o assembly para ser executado pelo CLR compatível com x86 de 32 bits.
  • Itanium compila o assembly para ser executado pelo CLR de 64 bits em um computador com um processador Itanium.

Em um sistema operacional do Windows de 64 bits:

  • Assemblies compilados com x86 são executados no CLR de 32 bits em execução no WOW64.
  • Uma DLL compilada com o anycpu é executada no mesmo CLR que o processo no qual ele está carregado.
  • Os executáveis que são compilados com o anycpu são executados no CLR de 64 bits.
  • Executáveis compilados com anycpu32bitpreferred execute no CLR de 32 bits.

a configuração anycpu32bitpreferred é válida somente para arquivos executáveis (.EXE) e requer .NET Framework 4,5 ou posterior. Para obter mais informações sobre o desenvolvimento de um aplicativo para ser executado em um sistema operacional Windows de 64 bits, consulte Aplicativos de 64 bits.

Você define a opção PlatformTarget na página de propriedades de compilação para seu projeto no Visual Studio.

O comportamento de anycpu tem algumas nuances adicionais sobre o .NET Core e o .NET 5 e versões posteriores. Quando você definir o anycpu, publique seu aplicativo e execute-o com o x86 dotnet.exe ou x64 dotnet.exe . Para aplicativos independentes, a dotnet publish etapa empacota o executável para o RID de configuração.

ProduceReferenceAssembly

A opção ProduceReferenceAssembly especifica um caminho de arquivo onde o assembly de referência deve ser apresentado. Ele se traduz metadataPeStream na API de emissão. O filepath especifica o caminho para o assembly de referência. Geralmente, ele deve corresponder ao assembly principal. a convenção recomendada (usada pelo MSBuild) é posicionar o assembly de referência em uma subpasta "ref/" relativa ao assembly primário.

<ProduceReferenceAssembly>filepath</ProduceReferenceAssembly>

Os assemblies de referência são um tipo especial de assembly que contém apenas a quantidade mínima de metadados necessários para representar a superfície da API pública da biblioteca. Eles incluem declarações para todos os membros que são significativos ao referenciar um assembly em ferramentas de compilação. Os assemblies de referência excluem todas as implementações de membros e declarações de membros privados. Esses membros não têm impacto observável em seu contrato de API. Para obter mais informações, consulte assemblies de referência no guia .net.

As opções ProduceReferenceAssembly e ProduceOnlyReferenceAssembly são mutuamente exclusivas.

TargetType

A opção de compilador TargetType pode ser especificada em uma das seguintes formas:

  • biblioteca: para criar uma biblioteca de códigos. biblioteca é o valor padrão.
  • exe: para criar um arquivo de .exe.
  • módulo para criar um módulo.
  • winexe para criar um programa de Windows.
  • winmdobj para criar um arquivo intermediário . winmdobj .
  • appcontainerexe para criar um arquivo de .exe para aplicativos da loja Windows 8. x.

Observação

para destinos de .NET Framework, a menos que você especifique o módulo, essa opção faz com que um manifesto de assembly .NET Framework seja colocado em um arquivo de saída. Para obter mais informações, consulte assemblies no .net e atributos comuns.

<TargetType>library</TargetType>

O compilador cria apenas um manifesto do assembly por compilação. As informações sobre todos os arquivos em uma compilação são colocados no manifesto do assembly. Ao gerar vários arquivos de saída na linha de comando, apenas um manifesto do assembly pode ser criado e ele deve ir para o primeiro arquivo de saída especificado na linha de comando.

Se você criar um assembly, poderá indicar que todo ou parte do seu código está em conformidade com CLS com o CLSCompliantAttribute atributo.

biblioteca

A opção de biblioteca faz com que o compilador crie uma dll (biblioteca de vínculo dinâmico) em vez de um arquivo executável (exe). A DLL será criada com a extensão .dll . A menos que especificado de outra forma com a opção OutputAssembly , o nome do arquivo de saída usa o nome do primeiro arquivo de entrada. Ao criar um arquivo de .dll , um Main método não é necessário.

exe

A opção exe faz com que o compilador crie um executável (exe), aplicativo de console. O arquivo executável será criado com a extensão .exe. Use winexe para criar um executável de programa de Windows. A menos que especificado de outra forma com a opção OutputAssembly , o nome do arquivo de saída usa o nome do arquivo de entrada que contém o ponto de entrada (método Main ou instruções de nível superior). Apenas um ponto de entrada é necessário nos arquivos de código-fonte que são compilados em um arquivo de .exe. A opção de compilador StartupObject permite especificar qual classe contém o Main método, em casos em que seu código tem mais de uma classe com um Main método.

module

Essa opção faz com que o compilador não gere um manifesto do assembly. Por padrão, o arquivo de saída criado pela compilação com essa opção terá uma extensão de .netmodule. Um arquivo que não tem um manifesto do assembly não pode ser carregado pelo runtime do .NET. No entanto, esse arquivo pode ser incorporado no manifesto do assembly de um assembly com AddModules. Se mais de um módulo for criado em uma única compilação, tipos internos em um módulo estarão disponíveis para outros módulos na compilação. Quando o código em um módulo referencia tipos em outro módulo, ambos os módulos devem ser incorporados em um internal manifesto do assembly, com AddModules. Não há suporte para a criação de um módulo no ambiente Visual Studio desenvolvimento.

Winexe

A opção winexe faz com que o compilador crie um EXE (executável), Windows programa. O arquivo executável será criado com a extensão .exe. Um Windows é aquele que fornece uma interface do usuário da biblioteca .NET ou com as APIs Windows aplicativo. Use exe para criar um aplicativo de console. A menos que especificado de outra forma com a opção OutputAssembly, o nome do arquivo de saída recebe o nome do arquivo de entrada que contém o Main método . Um e apenas um método são necessários nos arquivos de código-fonte Main compilados em um arquivo .exe dados. A opção StartupObject permite especificar qual classe contém o método , nos casos em que seu código tem mais de uma Main classe com um método Main .

winmdobj

Se você usar a opção winmdobj, o compilador criará um arquivo .winmdobj intermediário que poderá ser convertido em um arquivo binário Windows Runtime (.winmd). O arquivo .winmd pode ser consumido por programas JavaScript e C++, além de programas de linguagem gerenciada.

A configuração winmdobj indica para o compilador que um módulo intermediário é necessário. O arquivo .winmdobj pode ser alimentado por meio da ferramenta de exportação para produzir um arquivo de metadados Windows WinMDExp (.winmd). O arquivo .winmd contém o código da biblioteca original e os metadados do WinMD usados por JavaScript ou C++ e pelo runtime Windows. A saída de um arquivo compilado usando a opção do compilador winmdobj é usada apenas como entrada para a ferramenta de exportação WimMDExp. O próprio arquivo .winmdobj não é referenciado diretamente. A menos que você use a opção OutputAssembly, o nome do arquivo de saída usa o nome do primeiro arquivo de entrada. Um Main método não é necessário.

appcontainerexe

Se você usar a opção do compilador appcontainerexe, o compilador criará um arquivo executável Windows (.exe) que deve ser executado em um contêiner de aplicativo. Essa opção é equivalente a -target:winexe, mas foi projetada para aplicativos Windows 8.x Store.

Para exigir que o aplicativo seja executado em um contêiner de aplicativos, esta opção define um bit no arquivo PE. Quando esse bit estiver definido, ocorrerá um erro se o método CreateProcess tentar inicializar o arquivo executável fora de um contêiner de aplicativos. A menos que você use a opção OutputAssembly, o nome do arquivo de saída usa o nome do arquivo de entrada que contém o Main método .