Aracılığıyla paylaş


.netmodule bağlayıcı girişi olarak dosyalar

link.exe, MSIL .obj ve .netmodule dosyaları giriş olarak 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

.netmoduledosyaları 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 .netmoduleC++ 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 .netmoduleile 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 cl.exe'ye de 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 BooleanWrapNonExceptionThrows 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

Ayrıca bkz.