Compartilhar via


Escolhendo o formato de arquivos de entrada .netmodule

Você pode usar um arquivo MSIL .obj (compilado com /clr) como um .netmodule arquivo. .obj os arquivos contêm metadados e símbolos nativos. .netmodules contêm apenas metadados.

Passe um arquivo MSIL .obj para qualquer outro compilador do Visual Studio com a opção do /addmodule compilador. O .obj arquivo se torna parte do assembly resultante e deve ser enviado com o assembly. Por exemplo, o Visual C# e o Visual Basic têm a opção do /addmodule compilador.

Note

Na maioria dos casos, você precisa passar para o vinculador o .obj arquivo da compilação que criou o módulo .net. Passar um .dll arquivo de módulo ou .netmodule MSIL para o vinculador pode resultar em LNK1107.

.obj os arquivos, juntamente com seus arquivos associados .h , que você faz referência por meio de #include na origem, permitem que aplicativos C++ consumam os tipos nativos no módulo. Em um .netmodule arquivo, somente os tipos gerenciados podem ser consumidos por um aplicativo C++. Se você tentar passar um .obj arquivo para #using, as informações sobre tipos nativos não estão disponíveis. Em vez disso, #include o .obj arquivo do .h arquivo.

Outros compiladores do Visual Studio só podem consumir tipos gerenciados de um módulo.

Use as seguintes diretrizes para determinar se você precisa usar um .netmodule ou um .obj arquivo como entrada de módulo para o vinculador msvc:

  • Se você estiver criando com um compilador do Visual Studio diferente do Visual C++, produza um .netmodule e use como .netmodule entrada para o vinculador.

  • Se você estiver usando o compilador MSVC para produzir módulos e se os módulos forem usados para criar algo diferente de uma biblioteca, use os .obj arquivos produzidos pelo compilador como entrada de módulo para o vinculador. Não use o .netmodule arquivo como entrada.

  • Se os módulos forem usados para criar uma biblioteca nativa (não gerenciada), use .obj arquivos como entrada de módulo para o vinculador e gere um arquivo de .lib biblioteca.

  • Se os módulos forem usados para criar uma biblioteca gerenciada e se toda a entrada do módulo no vinculador for verificável (produzida com /clr:safe), use .obj arquivos como entrada de módulo para o vinculador e gere um .dll arquivo de biblioteca (assembly) ou .netmodule (módulo).

  • Se os módulos forem usados para criar uma biblioteca gerenciada e se uma ou mais entradas de módulos para o vinculador forem produzidas apenas /clr, use .obj arquivos como entrada de módulo para o vinculador e gere um .dll (assembly). Se você quiser expor tipos gerenciados da biblioteca e também quiser que aplicativos C++ consumam os tipos nativos na biblioteca, sua biblioteca consiste nos arquivos dos módulos de .obj componente de bibliotecas. Você também deseja enviar os .h arquivos para cada módulo, para que eles possam ser referenciados com #include do código-fonte.

See also

Arquivos .netmodule como entrada do vinculador