Есть ли примеры компиляции кода CIL из проекта Visual Studio
Я понимаю, что меня спросили и ответили, что Visual Studio не поддерживает проекты CIL/MSIL. ПроектMSBuildContrib имеет задачу ILASM, которая позволяет компилировать файлы IL во время сборки.
В Гугле не нашлось примеров, как использовать эту задачу.
Есть ли примеры использования ILASM как части решения Visual Studio? Я понимаю, что #ИЛИДА развивать и поддерживать КСС... цель здесь состоит в том, чтобы скомпилировать некоторые файлы CIL как часть визуального Студийное решение .
2 ответа:
Можно добавить "проект makefile". Шаблон находится в разделе Visual C++, Общие сведения. Этот тип проекта позволяет задавать пользовательские команды построения для действий построения, очистки и перестроения. Среда будет настроена автоматически, так что вам не придется возиться с путями. IDE C++ также поддерживает создание пользовательского правила сборки, поэтому вы можете автоматически запускать нужный инструмент (ilasm.exe) из расширения имени файла (. il).
Это, однако, примерно так же хорошо, как и получается. Здесь нет автоматическое сопоставление нескольких файлов. il в проекте с одной командой сборки. Написание nmake.exe makefile требуется, чтобы получить это. И будьте осторожны, что поддержка пользовательских правил сборки была нарушена в vs2010.
Я отдал должное Хансу за ответ на этот вопрос, но после некоторых экспериментов у меня есть решение, которое немного ближе к Дому:
КАК СКОМПИЛИРОВАТЬ CIL/MSIL ВНУТРИ VISUAL STUDIO
Следующий хак дает вам проект, который:
- уважает конфигурацию сборки Debug vs Release в Visual Studio.
- необязательно подписывает результирующую сборку CIL ключевым файлом, настроенным в настройках проекта.
- можно добавить к источнику контроль.
Выполните следующие действия:
- создайте пустую библиотеку классов C#
- в папке решения щелкните правой кнопкой мыши проект и выберите "выгрузить проект"
- Щелкните правой кнопкой мыши по выгруженному проекту и выберите "Редактировать проект"
- в файле csprof прокрутите вниз до конца и найдите строку с надписью "импорт ... Project= " $(MSBuildBinPath)\Microsoft.Используется CSharp.цели", и заменить его кодом на 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>"$(FrameworkPath)\Ilasm.exe" /NOLOGO /DLL /OUTPUT:"@(IntermediateAssembly)" </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:"$(AssemblyOriginatorKeyFile)" </IlAsmCommand> </PropertyGroup> <Exec Command="$(IlAsmCommand) @(Compile->'"%(FullPath)"', ' ')" Outputs="@(IntermediateAssembly)" /> <CallTarget Targets="$(TargetsTriggeredByCompilation)" Condition="'$(TargetsTriggeredByCompilation)' != ''" /> </Target>