öğesini seçin.netmodule bağlayıcı girişi olarak dosyalar
link.exe GIRIŞ olarak MSIL .obj
ve .netmodule
dosyaları kabul eder. Bağlayıcı tarafından üretilen çıkış dosyası, bağlayıcıya giriş yapılan veya dosyalardan herhangi birine .obj
çalışma zamanı bağımlılığı olmayan bir .netmodule
derleme veya .netmodule
dosyadır.
Açıklamalar
.netmodule
dosyaları MSVC derleyicisi tarafından /LN (MSIL modülü oluşturma) ile veya /NOASSEMBLY (MSIL Modülü Oluşturma) ile bağlayıcı tarafından oluşturulur. .obj
dosyaları her zaman bir C++ derlemesinde oluşturulur. Diğer Visual Studio derleyicileri için /target:module derleyici seçeneğini kullanın.
Bağlayıcı, .obj
dosyasını oluşturan .netmodule
C++ derlemesinden geçirilmelidir. .netmodule
/clr:pure ve /clr:safe derleyici seçenekleri Visual Studio 2015'te kullanım dışı bırakıldığından ve Visual Studio 2017 ve sonraki sürümlerde desteklenmediğinden, 'a geçiş artık desteklenmiyor.
Bağlayıcıyı komut satırından çağırma hakkında bilgi için bkz . Bağlayıcı komut satırı söz dizimi ve Komut satırından MSVC araç takımını kullanma.
MSVC derleyicisi tarafından / ileclr derlenen bağlayıcıya bir .netmodule
veya .dll
dosyası geçirmek bağlayıcı hatasına neden olabilir. Daha fazla bilgi için bkz . .netmodule giriş dosyalarının biçimini seçme.
Bağlayıcı hem yerel .obj
dosyaları hem de /clrile derlenen MSIL .obj
dosyalarını kabul eder. Karma .obj
dosyaları aynı derlemede geçirebilirsiniz. Sonuçta elde edilen çıktı dosyasının varsayılan doğrulanabilirliği, en düşük giriş modülünün doğrulanabilirliğiyle aynıdır.
İki veya daha fazla derlemeden oluşan bir uygulamayı bir derlemede yer almak üzere değiştirebilirsiniz. Derlemelerin kaynaklarını yeniden derleyin ve ardından tek bir derleme oluşturmak için dosyaları veya .netmodule
dosyaları bağlayın.obj
.
Yürütülebilir görüntü oluştururken /ENTRY (Giriş noktası simgesi) kullanarak bir giriş noktası belirtin.
BIR MSIL .obj
veya .netmodule
dosyayla bağlantı oluştururken /LTCG (Bağlantı zamanı kodu oluşturma) kullanın, aksi takdirde bağlayıcı MSIL .obj
veya .netmodule
ile karşılaştığında bağlantıyı /LTCG ile yeniden başlatır. Bağlantının yeniden başlatıldığını belirten bir bilgilendirme iletisi görürsünüz. Bu iletiyi yoksayabilirsiniz, ancak bağlayıcı performansını geliştirmek için /LTCG'yi açıkça belirtin.
MSIL .obj
veya .netmodule
dosyalar da cl.exe geçirilebilir.
Giriş MSIL .obj
veya .netmodule
dosyaları ekli kaynaklara sahip olamaz. /ASSEMBLYRESOURCE (Yönetilen kaynak ekleme) bağlayıcı seçeneğini kullanarak kaynakları bir çıkış modülüne veya derleme dosyasına ekleyin. Veya diğer Visual Studio derleyicilerinde /resource derleyicisi seçeneğini kullanın.
Örnekler
C++ kodundacatch
, özel durum olmayanSystem
bir durum için karşılık gelen try
bir bloğu çağrılır. Ancak, varsayılan olarak, CLR özel durum olmayanlarıSystem
ile sarmalar RuntimeWrappedException. C++ ve C++ olmayan modüllerden bir derleme oluşturulduğunda ve blok özel durum oluşturmadığındaSystem
C++ kodundaki bir catch
bloğun try
ilgili try
yan tümcesinden çağrılmasını istediğinizde, C++ olmayan modüllerin kaynak koduna özniteliğini eklemeniz [assembly:System::Runtime::CompilerServices::RuntimeCompatibility(WrapNonExceptionThrows=false)]
gerekir.
// 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();
}
*/
özniteliğinin Boolean
WrapNonExceptionThrows
değerini değiştirerek, özel durum olmayanSystem
bir durumu yakalamak için C++ kodunun yeteneğini değiştirirsiniz.
// 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