Scelta del formato dei file di input con estensione netmodule
Un file MSIL con estensione obj, compilato con l'opzione /clr, può essere utilizzato anche comefile con estensione netmodule.Nei file obj sono presenti metadati e simboli nativi,.I file con estensione netmodule contengono solo metadati.
È possibile passare un file obj MISL a un qualsiasi altro compilatore Visual Studio tramite l'opzione del compilatore /addmodule, tenendo comunque presente che il file obj diventerà parte dell'assembly risultante e dovrà quindi essere distribuito con l'assembly.L'opzione del compilatore /addmodule è ad esempio disponibile in Visual C# e Visual Basic.
[!NOTA]
Nella maggior parte dei casi, sarà necessario passare al linker il file con estensione obj dalla compilazione che ha creato ilmodulo con estensione net,a meno che ilfile con estensione netmodule non sia stato creato con l'opzione /clr:pure.Il passaggio di un file di modulo MSIL con estensione dll onetmodule al linker può determinare l'errore LNK1107.
I file con estensione obj e i relativi file con estensione h associati, a cui si fa riferimento nell'origine tramite #include, consentono alle applicazioni C++ di utilizzare i tipi nativi nel modulo. Diversamente, in unfile con estensione netmodule un'applicazione C++ può utilizzare solo i tipi gestiti.Se si tenta di passare un file obj a #using, le informazioni sui tipi nativi non risulteranno disponibili. Passare a #include il file con estensione h del file obj.
Gli altri compilatori Visual Studio possono utilizzare solo i tipi gestiti di un modulo.
Per determinare se deve essere utilizzato unfile con estensione netmodule oppure obj come input di modulo del linker di Visual C++, attenersi alle seguenti indicazioni:
Se si esegue la compilazione con un compilatore Visual Studio diverso da Visual C++, creare unfile con estensione netmodule e utilizzarlocome input del linker.
Se si utilizza il compilatore Visual C++ per creare moduli e questi ultimi verranno utilizzati per compilare un oggetto diverso da una libreria, utilizzare come input di modulo del linker i file con estensione obj creati dal compilatore e non ilfile con estensione netmodule.
Se i moduli verranno utilizzati per compilare una libreria nativa (non gestita), utilizzare come input di modulo del linker i file obj e creare un file di libreria lib.
Se i moduli verranno utilizzati per compilare una libreria gestita e ciascun input di modulo del linker sarà verificabile, ovvero creato con /clr:safe, utilizzare come input di modulo del linker i file con estensione obj e generare un file di libreria con estensione dll (assembly) onetmodule (modulo).
Se i moduli verranno utilizzati per compilare una libreria gestita e ciascun input di modulo del linker sarà creato con /clr:pure o /clr:safe, utilizzare come input di modulo del linker i file con estensione obj e generare un file con estensione dll (assembly) onetmodule (modulo) se si desidera esporre solo i tipi gestiti della libreria.Se si desidera che i tipi gestiti della libreria, oltre a essere esposti, vengano anche utilizzati dalle applicazioni C++, la libreria dovrà essere composta dai file obj relativi ai moduli componenti delle librerie. Poiché verranno distribuiti, è possibile fare riferimento ai file con estensione h per ciascun modulo dal codice sorgente con #include.
Se i moduli verranno utilizzati per compilare una libreria gestita e se uno o più input di modulo del linker verranno creati con /clr, utilizzare come input di modulo del linker i file obj e generare un file di libreria dll (assembly).Se si desidera che i tipi gestiti della libreria, oltre a essere esposti, vengano anche utilizzati dalle applicazioni C++, la libreria dovrà essere composta dai file obj relativi ai moduli componenti delle librerie. Poiché verranno distribuiti, è possibile fare riferimento ai file con estensione h per ciascun modulo dal codice sorgente con #include.