Есть ли какие-либо примеры компиляции CIL-кода из проекта Visual Studio

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

  •  28-09-2019
  •  | 
  •  

Вопрос

Я понимаю, что просили и ответили, что Visual Studio не поддерживает проекты CIL / MSIL. То MSBUILDCONTRIB Проект имеет задачу ILASM, которая позволяет вам компилировать файлы IL в сборке.

Геогел подошел пустым на примерах, чтобы использовать эту задачу.

Существуют ли какие-либо примеры использования Ilasm в составе решения Visual Studio? Я понимаю, что #Develope и ILide поддерживают CIL ... целью здесь состоит в том, чтобы составить несколько файлов CIL Как часть решения Visual Studio.

Это было полезно?

Решение

Вы можете добавить «проект Makefile». Шаблон находится под Visual C ++, общий. Этот тип проекта позволяет вам указать пользовательские команды сборки для сборки, чистых и восстановленных действий. Окружающая среда будет автоматически настроена, поэтому вам не нужно беспорядок с путями. IDE C ++ также поддерживает создание правила пользовательского сборки, чтобы автоматически вызвать правильный инструмент (ILASM.exe) из расширения имени файла (.IL).

Это, однако, примерно так же хорошо, как он получает. Не существует автоматического отображения нескольких файлов .IL в проекте к одной команде Build. Написание makefile nmake.exe требуется, чтобы получить это. И остерегайтесь, что поддержка пользовательских правил сборки была разбита в VS2010.

Другие советы

Я дал Hans Credit за ответ на этот вопрос, но после некоторых экспериментов у меня есть решение, которое немного ближе к дому:

Как компилировать CIL / MSIL внутри Visual Studio

Следующий взлом получает проект, который:

  • Уважает конфигурацию сборки Debug против выпуска в 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