是否有任何从Visual Studio项目中编译CIL代码的示例

时间:2010-11-01 11:24:18

标签: visual-studio cil il ilasm

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

Google上搜索了如何使用此任务的示例。

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

2 个答案:

答案 0 :(得分:13)

我在回答这个问题时给了汉斯的赞誉,但经过一些实验后,我得到了一个离家更近的解决方案:

如何在可视化工作室内编译CIL / MSIL

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

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

请按照以下步骤操作:

  1. 创建一个空的C#类库
  2. 在解决方案文件夹中,右键单击项目并选择“卸载项目”
  3. 右键单击已卸载的项目,然后选择“编辑项目”
  4. 在csprof文件中,向下滚动到底部,找到“Import ... Project =”$(MSBuildBinPath)\ Microsoft.CSharp.targets“的行,并将其替换为{{3处的代码(复制如下)
  5. 这是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>
    

答案 1 :(得分:1)

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

然而,这一切都和它一样好。项目中的多个.il文件没有自动映射到单个构建命令。为了得到它,需要编写一个nmake.exe makefile。请注意,vs2010中的自定义构建规则支持已被破坏。