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.

Foi útil?

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:

  1. Crie uma biblioteca de classes C# vazia
  2. Na pasta Solution, clique com o botão direito do mouse no projeto e escolha "Projeto de descarga"
  3. Clique com o botão direito do mouse no projeto descarregado e escolha "Editar Projeto"
  4. 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>&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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top