هل هناك أي أمثلة على تجميع كود CIL من داخل مشروع Visual Studio

StackOverflow https://stackoverflow.com/questions/4068425

  •  28-09-2019
  •  | 
  •  

سؤال

أدرك أنه تم سؤاله وأجبت على أن Visual Studio لا يدعم مشاريع CIL/MSIL. ال msbuildcontrib يحتوي Project على مهمة ILASM تتيح لك تجميع ملفات IL في وقت الإنشاء.

ظهرت Googled فارغة على أمثلة حول كيفية استخدام هذه المهمة.

هل هناك أي أمثلة على استخدام ILASM كجزء من حل Visual Studio؟ أدرك أن #Develope و Ilide Support Cil ... الهدف هنا هو تجميع بعض ملفات CIL كجزء من حل Visual Studio.

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

المحلول

يمكنك إضافة "مشروع Makefile". القالب تحت Visual C ++ ، عام. يتيح لك نوع المشروع تحديد أوامر بناء مخصصة لإجراءات الإنشاء والتنظيف وإعادة البناء. سيتم إعداد البيئة تلقائيًا حتى لا تضطر إلى العبث بالمسارات. يدعم C ++ IDE أيضًا إنشاء قاعدة بناء مخصصة حتى تتمكن من تشغيل الأداة الصحيحة تلقائيًا (ilasm.exe) من امتداد اسم الملف (.il).

لكن هذا جيد كما يحصل. لا يوجد رسم خرائط تلقائي لملفات .IL متعددة في المشروع إلى أمر بناء واحد. كتابة nmake.exe makefile مطلوب للحصول على ذلك. واحذر من دعم قواعد الإنشاء المخصصة في VS2010.

نصائح أخرى

أعطيت هانز الفضل في الإجابة على هذا السؤال ، لكن بعد بعض التجارب ، لدي حل يقترب قليلاً من المنزل:

كيفية تجميع CIL/MSIL داخل Visual Studio

الاختراق التالي يحصل عليك مشروع:

  • يحترم تكوين التصحيح مقابل الإصدار في Visual Studio.
  • يوقع اختياريا على مجموعة CIL الناتجة مع ملف المفتاح الذي تم إعداده في تفضيلات المشروع.
  • يمكن إضافتها إلى التحكم في المصدر.

اتبع هذه الخطوات:

  1. قم بإنشاء مكتبة فصول C# فارغة
  2. في مجلد الحل ، انقر بزر الماوس الأيمن فوق المشروع واختر "إلغاء تحميل المشروع"
  3. انقر بزر الماوس الأيمن على المشروع الذي تم تحميله واختر "تحرير المشروع"
  4. في ملف CSPROF ، قم بالتمرير لأسفل إلى الأسفل ، وابحث عن السطر الذي يقول "استيراد ... project =" $ (msbuildbinpath) microsoft.csharp.targets "، واستبدله بالرمز في http://pastebin.com/kejtyqlu (نسخ أدناه)

ها هي XML:

  <Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" />

  <Target Name="CreateManifestResourceNames" />

  <Target Name="CoreCompile" Inputs="$(MSBuildAllProjects);@(Compile);" Outputs="@(IntermediateAssembly);$(NonExistentFile);">
    <GetFrameworkPath>
      <Output TaskParameter="Path" PropertyName="FrameworkPath" />
    </GetFrameworkPath>

    <PropertyGroup>
      <IlAsmCommand>&quot;$(FrameworkPath)\Ilasm.exe&quot; /NOLOGO /DLL /OUTPUT:&quot;@(IntermediateAssembly)&quot; </IlAsmCommand>
    </PropertyGroup>

    <PropertyGroup Condition=" '$(Configuration)' == 'Debug' " >
      <IlAsmCommand>$(IlAsmCommand) /DEBUG </IlAsmCommand>
    </PropertyGroup>

    <PropertyGroup Condition=" '$(Configuration)' == 'Release' " ><IlAsmCommand>$(IlAsmCommand) /OPTIMIZE </IlAsmCommand></PropertyGroup>

    <PropertyGroup Condition=" '$(AssemblyOriginatorKeyFile)' != '' " >
      <IlAsmCommand>$(IlAsmCommand) /KEY:&quot;$(AssemblyOriginatorKeyFile)&quot; </IlAsmCommand>
    </PropertyGroup>

    <Exec Command="$(IlAsmCommand) @(Compile->'&quot;%(FullPath)&quot;', ' ')" 
          Outputs="@(IntermediateAssembly)" />

    <CallTarget Targets="$(TargetsTriggeredByCompilation)" Condition="'$(TargetsTriggeredByCompilation)' != ''" />

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