7

Visual Studio は CIL/MSIL プロジェクトをサポートしていないという質問と回答が寄せられていることを認識しています。MSBuildContribプロジェクトには、ビルド時に IL ファイルをコンパイルできる ILASM タスクがあります

このタスクの使用方法の例については、Google で検索しても何も見つかりませんでした。

Visual Studio ソリューションの一部として ILASM を使用する例はありますか? #develope と ILIDE が CIL をサポートしていることに気づきました...ここでの目的は、Visual Studio ソリューションの一部としていくつかの CIL ファイルをコンパイルすることです。

4

2 に答える 2

16

この質問に答えてくれたのはハンスの功績だと思いますが、いくつかの実験の後、私は少し自宅に近い解決策を得ました:

Visual Studio 内で CIL/MSIL をコンパイルする方法

次のハックは、次のプロジェクトを取得します。

  • 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 に答える