7

我意识到有人询问并回答了 Visual Studio 不支持 CIL/MSIL 项目。MSBuildContrib项目有一个ILASM任务,允许您在构建时编译 IL 文件。

谷歌上没有关于如何使用此任务的示例。

有没有使用 ILASM 作为 Visual Studio 解决方案一部分的示例?我意识到#develope 和 ILIDE 支持 CIL...这里的目标是编译一些 CIL 文件作为 Visual Studio 解决方案的一部分

4

2 回答 2

16

我感谢 Hans 回答了这个问题,但经过一些实验后,我得到了一个稍微接近家庭的解决方案:

如何在 VISUAL STUDIO 中编译 CIL/MSIL

以下 hack 为您提供了一个项目:

  • 尊重 Visual Studio 中的调试与发布构建配置。
  • 可选择使用项目首选项中设置的密钥文件对生成的 CIL 程序集进行签名。
  • 可以添加到源代码管理中。

跟着这些步骤:

  1. 创建一个空的 C# 类库
  2. 在解决方案文件夹中,右键单击项目并选择“卸载项目”
  3. 右键单击卸载的项目并选择“编辑项目”
  4. 在 csprof 文件中,向下滚动到底部,找到“Import ... 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>
于 2010-11-02T10:49:50.377 回答
1

您可以添加一个“makefile 项目”。该模板位于 Visual C++,General 下。此项目类型允许您为 Build、Clean 和 Rebuild 操作指定自定义构建命令。环境将自动设置,因此您不必弄乱路径。C++ IDE 还支持创建自定义构建规则,以便您可以从文件扩展名 (.il) 自动触发正确的工具 (ilasm.exe)。

然而,这已经是最好的了。项目中的多个 .il 文件不会自动映射到单个构建命令。需要编写一个 nmake.exe makefile 来获得它。并且要注意自定义构建规则支持在 vs2010 中被破坏了。

于 2010-11-01T12:13:21.473 回答