سؤال

هل هناك أداة لاستيراد/تحويل مكتبات نوع com إلى رمز C# بدلاً من إنشاء مجموعة؟ تقوم أداة TLBIMP وفئة TypelibaryConverter بإنشاء مجموعات فقط.

لقد حقق بعض النجاح تمزيق C# ComImport تعاريف تشغيل العاكس على مجموعة interop التي تم إنشاؤها ونسخ لصق المصدر المفكك ، ولكن هذا عادة ما يتطلب الكثير من الترقيع اليدوي قبل أن يتم تجميعه.

الهدف المرغوب فيه هو exe واحد بدون DLLs interop interop ، لذلك ربما يكون الجواب هو استخدام Ilmerge لتضمين DLL Interop بشكل فعال في EXE.

كنت متأكدًا في الماضي ، واجهت مثل هذه الأداة - لكن ربما كانت تحلم بها :-)

هل كانت مفيدة؟

المحلول 3

كما كنت أظن في الأصل أن أفضل حل هو ilmerge. لا يمكنني أن أكون انتقائيًا حول أجزاء من واجهة برمجة تطبيقات COM للتضمين ، لكنه يعمل بشكل جيد بما فيه الكفاية.

فيما يلي سطر أوامر حدث ما بعد الإنشاء الذي أستخدمه ، والذي يجب أن يكون سهلاً بما يكفي لإعادة الاستخدام:

set MERGEFILES=Interop.Foo.dll Interop.Bar.dll

if "$(ConfigurationName)" == "Release" (
   ren "$(TargetFileName)" "_$(TargetFileName)"
   "$(ProgramFiles)\Microsoft\ILMerge\ILMerge.exe" /out:"$(TargetFileName)" "_$(TargetFileName)" %MERGEFILES%

   del "_$(TargetFileName)"
   del %MERGEFILES%
)

نصائح أخرى

لست متأكدًا جدًا من أنه سيكون مفيدًا لك ، ولكن تم إصدار الكود المصدري لإصدار مُدار من tlbimp.exe على codeplex. سوف VS2010 بالتأكيد حل مشكلتك.

هذا لن يساعدك اليوم ، ولكن هناك ميزة قادمة في الإصدار التالي من C#. يطلق عليه Nopia أو نوع التضمين اعتمادًا على العرض التقديمي الذي تقرأه. ستربط هذه الميزة بشكل أساسي مجموعة PIA بأي مشروع تشير إليه منه. The End Resulrt هي exe واحدة لا حاجة لنشر dll interop/pia.

منشور ميشا حول هذا الموضوع: http://blogs.msdn.com/mshneer/archive/2008/10/28/type-embedding-support-in-c.aspx

على المدى القصير ، قد تضطر إلى الذهاب مع Ilmerge أو Reflector + Copy Code.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top