Existem exemplos de código CIL de compilação de um projeto Visual Studio
-
28-09-2019 - |
Pergunta
Sei que foi perguntado e respondeu que o Visual Studio não suporta projetos CIL/MSIL. o MsbuildContrib O Project possui uma tarefa de ilasma que permite compilar arquivos IL no horário de construção.
O Google veio vazio em exemplos de como usar essa tarefa.
Existem exemplos de uso de ilasma como parte de uma solução do Visual Studio? Percebo que #Develope e Ilide suportam CIL ... O objetivo aqui é compilar alguns arquivos CIL Como parte de uma solução Visual Studio.
Solução
Você pode adicionar um "projeto makefile". O modelo está em C ++ visual, geral. Esse tipo de projeto permite especificar comandos de construção personalizados para as ações de construção, limpeza e reconstrução. O ambiente será configurado automaticamente para que você não precise mexer com os caminhos. O C ++ IDE também suporta a criação de uma regra de construção personalizada para que você possa acionar automaticamente a ferramenta correta (ilasm.exe) a partir da extensão do nome do arquivo (.il).
No entanto, isso é tão bom quanto é. Não há mapeamento automático de vários arquivos .il no projeto para um único comando de compilação. Escrever um nmake.exe makefile é necessário para conseguir isso. E tenha cuidado que o suporte às regras de construção personalizado foi quebrado no VS2010.
Outras dicas
Dei crédito a Hans por responder a essa pergunta, mas depois de alguma experimentação, tenho uma solução que chega um pouco mais perto de casa:
Como compilar CIL/MSIL dentro do Visual Studio
O hack seguinte recebe um projeto que:
- Respeita a configuração de construção de depuração vs. liberação no Visual Studio.
- Opcionalmente assina o conjunto CIL resultante com o arquivo de chave configurado nas preferências do projeto.
- Pode ser adicionado ao controle de origem.
Siga esses passos:
- Crie uma biblioteca de classes C# vazia
- Na pasta Solution, clique com o botão direito do mouse no projeto e escolha "Projeto de descarga"
- Clique com o botão direito do mouse no projeto descarregado e escolha "Editar Projeto"
- No arquivo CSPROF, role para baixo até o fundo e encontre a linha que diz "importar ... Project =" $ (msbuildbinpath) microsoft.csharp.targets "e substitua -o pelo código em http://pastebin.com/kejtyqlu (copiado abaixo)
Aqui está o 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>