ملفات.netmodule كإدخال الرابط

ويقبل ارتباط.exe الآن MSIL.obj و. netmodules ك إدخال. سيتم إنتاجها بواسطة الرابط ملف الإخراج تجميع أو. netmodule مع عدم وجود تبعية وقت التشغيل تشغيل أي.obj أو. netmodules التي تم إدخالها إلى الرابط.

. يتم netmodules تاريخ الإنشاء ببرنامج التحويل البرمجي Visual C + + مع /LN (إنشاء MSIL وحدة نمطية?)أو بواسطة الرابط بواسطة /NOASSEMBLY (إنشاء وحدة نمطية MSIL). يتم دائماً تاريخ الإنشاء.objs في تجميع Visual C + +. بالنسبة للآخرين compilers ‏‫Visual Studio، استخدم /target:moduleخيار المترجم.

في معظم الحالات، ستحتاج لتمريرها إلى الرابط الملف.obj من التحويل البرمجي Visual C + + التي تاريخ الإنشاء. netmodule، ما لم تكن. netmodule التي تم إنشاؤها مع /clr (التحويل البرمجي وقت تشغيل اللغة العامة). MSIL. يستخدم كإدخال netmodules إلى يجب أن تكون الرابط MSIL خالص، والتي يمكن أن يقدمه المحول البرمجي Visual C + + استخدام /clr:safe. إنتاج غير ذلك compilers ‏‫Visual Studio فقط الوحدات النمطية MSIL ب الافتراضي.

للحصول تشغيل معلومات حول إلى استدعاء الرابط من سطر الأوامر، راجع الرابط الأمر-بناء جملة سطرو تعيين مسار ومتغيرات بيئة للبنيات سطر الأوامر.

تمرير. ملف netmodule أو.dll إلى الرابط الذي تم تحويله برمجياً ببرنامج التحويل البرمجي Visual C + + مع بواسطة /clrأو /clr:pureيمكن أن ينتج الخطأ الرابط. لمزيد من المعلومات، راجع اختيار تنسيق.netmodule ملفات إدخال.

الرابط تقبل الملفات الأصلية.obj كـ أيضا كـ MSIL.obj ملفات التحويل البرمجي مع /clr، /clr:pure، أو /clr:safe. عند تمرير.objs مختلط في الإنشاء نفسها، verifiability من الناتج عن عملية الدمج الإخراج إلى ملف، عن طريق الافتراضي، يكون مساوياً إلى أدنى المستوى ل verifiability من الوحدات النمطية للإدخال. على سبيل المثال، إذا قمت بتمرير.obj خالص والأمن إلى رابط، ملف الإخراج ستكون خالص. /CLRIMAGETYPE (لتحديد نوع CLR نسخة)يسمح لك بتعيين المستوى أقل من verifiability، إذا كان ذلك هو ما كنت الحاجة.

إذا كان لديك أحد تطبيقات التي هو تتألف من الثاني أو المزيد تجميعات وكنت تريد تطبيق يمكن تضمينها في تجميع واحد، يجب إعادة التحويل البرمجي للتجميعات ومن ثم قم بربط.objs أو. netmodules إلى إنتاج تجميع واحدة.

يجب تحديد يؤشر إدخال استخدام /إدخال (ذات يؤشر إدخال الرمز)عند إنشاء عنصر نسخة قابلة للتنفيذ.

عند إضافة ارتباطات.obj MSIL أو. ملف netmodule، استخدام /LTCG (وقت الارتباط تعليمات برمجية توليد)، وإلا عندما يواجه الرابط.obj MSIL أو. netmodule، فإنه سيتم إعادة تشغيل ارتباط مع/LTCG.

MSIL.obj أو. يمكن أيضا تمرير ملفات netmodule إلى cl.exe.

إدخال MSIL.obj أو. لا يمكن أن يكون لديك تضمين ملفات netmodule موارد. مورد هو مضمنة في ملف إخراج (وحدة نمطية أو تجميع) بواسطة /التجميع مورد (يضمّن مدارة مورد)خيار الرابط أو باستخدام /resourceخيار المترجم في compilers Studio Vهوual الأخرى.

عند القيام بربط MSIL، وإذا لم تحدد أيضا /LTCG (وقت الارتباط تعليمات برمجية توليد)، سوف ترى رسالة معلومات التقارير التي الارتباط هو إعادة التشغيل. يمكن تجاهل هذه الرسالة، ولكن إلى لتحسين أداء الرابط بإضافة ارتباطات MSIL، تحديد بشكل واضح /LTCG.

مثال

في تعليمات برمجية C + + سيتم استدعاؤه حظر catch حاول الموافقة النظام غير ‏‏ استثناء. ومع ذلك، مع يلتف CLR شكل افتراضي بالنظام غير الاستثناءات مع RuntimeWrappedException. عند تجميع هو التي تم إنشاؤها من Vهوual + + C و C + + Vهوual غير الوحدات النمطية وكنت تريد حظر catch في C + + رمز لطلبة من عبارة حاول المقابلة لها عندما يطرح حظر المحاولة استثناء غير النظام، يجب إضافة

سمة [تجميع:النظام::وقت التشغيل::CompilerServices::وقت التشغيلCompatibility(WrapNonExceptionThrows=خطأ)] إلى رمز المصدر للوحدات النمطية غير 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();
}
*/

بواسطة تغيير القيمة السمة WrapNonExceptionThrows منطقي، تقوم بتعديل قدرة تعليمات برمجية Visual C + + إلى تصفية استثناء غير النظام.

// 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 

راجع أيضًا:

المرجع

ملفات إدخال ارتباط

خيارات الرابط