Scelta del formato dei file di input con estensione netmodule
Aggiornamento: novembre 2007
Un file obj MSIL, compilato con /clr, può essere utilizzato anche come file netmodule. Nei file obj sono presenti metadati e simboli nativi, mentre nei file netmodule sono inclusi 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 obj dalla compilazione che ha creato il modulo net, a meno che il file netmodule non sia stato generato con /clr:pure. Il passaggio di un file di modulo dll o netmodule MSIL al linker può determinare l'errore LNK1107. |
I file obj e i relativi file con estensione h associati, a cui si fa riferimento nel codice sorgente tramite #include, consentono alle applicazioni C++ di utilizzare i tipi nativi nel modulo. Diversamente, nei file netmodule le applicazioni C++ possono utilizzare solo 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 un file obj o un file netmodule come input di modulo del linker Visual C++, attenersi alle seguenti indicazioni:
Se le generazioni vengono eseguite con un compilatore diverso da Visual Studio, creare un file netmodule e utilizzarlo come input del linker.
Se si utilizza il compilatore Visual C++ per creare moduli e questi ultimi verranno utilizzati per generare un oggetto diverso da una libreria, utilizzare come input di modulo del linker i file obj creati dal compilatore e non i file netmodule.
Se i moduli verranno utilizzati per generare 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 generare una libreria e ciascun input di modulo del linker sarà verificabile, ovvero creato con /clr:safe, utilizzare come input di modulo del linker i file obj e generare un file di libreria dll (assembly) o netmodule (modulo).
Se i moduli verranno utilizzati per generare una libreria gestita e ciascun input di modulo del linker verrà creato con /clr:pure o /clr:safe, utilizzare come input di modulo del linker i file obj e generare un file dll (assembly) o netmodule (modulo) solo se si desidera esporre 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 generare 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.