Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
link.exe accetta MSIL .obj e .netmodule i file come input. Il file di output prodotto dal linker è un assembly o un .netmodule file senza dipendenze in fase di esecuzione da uno qualsiasi dei .obj file o .netmodule che erano input per il linker.
Osservazioni:
.netmodule i file vengono creati dal compilatore MSVC con /LN (modulo Create MSIL) o dal linker con /NOASSEMBLY (Create a MSIL Module).
.obj i file vengono sempre creati in una compilazione C++. Per altri compilatori di Visual Studio, usare l'opzione del compilatore /target:module.
Il linker deve essere passato al .obj file dalla compilazione C++ che ha creato ..netmodule Il passaggio di un .netmodule oggetto non è più supportato perché le opzioni del compilatore /clr:pure e /clr:safe sono deprecate in Visual Studio 2015 e non supportate in Visual Studio 2017 e versioni successive.
Per informazioni su come richiamare il linker dalla riga di comando, vedere sintassi della riga di comando del linker e Usare il set di strumenti MSVC dalla riga di comando.
Il passaggio di un .netmodule file o .dll al linker compilato dal compilatore MSVC con /clr può generare un errore del linker. Per altre informazioni, vedere netmodule di input.
Il linker accetta sia i file nativi .obj che i file MSIL .obj compilati con /clr. È possibile passare file misti .obj nella stessa compilazione. La verifica predefinita del file di output risultante corrisponde alla verificabilità del modulo di input più basso.
È possibile modificare un'applicazione composta da due o più assembly in modo che siano contenuti in un assembly. Ricompilare le origini degli assembly e quindi collegare i file o .obj i .netmodule file per produrre un singolo assembly.
Specificare un punto di ingresso usando /ENTRY (simbolo punto di ingresso) durante la creazione di un'immagine eseguibile.
Quando si esegue il collegamento con un file o MSIL.obj, usare .netmodule in caso contrario, quando il linker rileva MSIL o .obj, riavvia il collegamento con .netmodule. Verrà visualizzato un messaggio informativo che indica che il collegamento viene riavviato. È possibile ignorare questo messaggio, ma per migliorare le prestazioni del linker, specificare in modo esplicito /LTCG.
È anche possibile passare file o .obj MSIL .netmodule a cl.exe.
I file o .obj MSIL .netmodule di input non possono avere risorse incorporate. Incorporare le risorse in un modulo di output o in un file di assembly usando l'opzione del linker /ASSEMBLYRESOURCE (Incorpora una risorsa gestita). In alternativa, usare l'opzione /resource compiler in altri compilatori di Visual Studio.
Esempi
Nel codice C++ il catch blocco di un oggetto corrispondente try verrà richiamato per un'eccezione nonSystem . Tuttavia, per impostazione predefinita, CLR esegue il wrapping di eccezioni nonSystem con RuntimeWrappedException. Quando un assembly viene creato da moduli C++ e non C++ e si vuole richiamare un catch blocco nel codice C++ dalla clausola corrispondente try quando il try blocco genera un'eccezioneSystem diversa, è necessario aggiungere l'attributo [assembly:System::Runtime::CompilerServices::RuntimeCompatibility(WrapNonExceptionThrows=false)] al codice sorgente per i moduli non C++.
// MSIL_linking.cpp
// compile with: /c /clr
value struct V {};
ref struct MCPP {
static void Test() {
try {
throw (gcnew V);
}
catch (V ^) {
System::Console::WriteLine("caught non System exception in C++ source code file");
}
}
};
/*
int main() {
MCPP::Test();
}
*/
Modificando il Boolean valore dell'attributo WrapNonExceptionThrows , si modifica la capacità del codice C++ di intercettare un'eccezioneSystem non.
// MSIL_linking_2.cs
// compile with: /target:module /addmodule:MSIL_linking.obj
// post-build command: link /LTCG MSIL_linking.obj MSIL_linking_2.netmodule /entry:MLinkTest.Main /out:MSIL_linking_2.exe /subsystem:console
using System.Runtime.CompilerServices;
// enable non System exceptions
[assembly:RuntimeCompatibility(WrapNonExceptionThrows=false)]
class MLinkTest {
public static void Main() {
try {
MCPP.Test();
}
catch (RuntimeWrappedException) {
System.Console.WriteLine("caught a wrapped exception in C#");
}
}
}
caught non System exception in C++ source code file