3

IlMergeを使用して、プロジェクトのすべてのdllを1つのexeにマージしました。メインのcsprojの「インポート」で参照されるターゲットファイルを使用します。

ターゲットのExecCommandは次のとおりです。

  <Exec Command="&quot;$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe&quot; /out:@(MainAssembly) &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ')" /> 

これは機能します。

しかし、セットアッププロジェクトがあります。ビルドすると、「インポート」が無視され、dllがマージされません。セットアッププロジェクトでターゲットファイルを使用するにはどうすればよいですか?

メインプロジェクトのビルド後のイベント(プロジェクトのプロパティ内)でIlmergeに同じコードを書いてみましたが、エラーコード1が表示されます。

4

2 に答える 2

2

MSBuild Community Tasksの ILMerge Task を確認することをお勧めします。ILMerge タスクのドキュメントはダウンロードに含まれています。今行っているように正確なコマンド ライン引数を指定する複雑さが取り除かれます。

特定の問題について、エラー コード 1 以外に、結果として他のエラー メッセージが表示されますか? コメントしてください。できる限り返信を編集します。

于 2008-11-05T20:59:00.320 に答える
1

私の解決策は次のとおりです。Ilmergeターゲットファイルのインポートをcsprojに入れました。これは次のとおりです。

<Project 
 DefaultTargets="Build" 
 xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

 <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

 <Target Name="AfterBuild">
   <CreateItem Include="@(ReferencePath)" Condition="'%(CopyLocal)'=='true'">
       <Output TaskParameter="Include" ItemName="IlmergeAssemblies"/>
   </CreateItem>

   <Message Text="MERGING: @(IlmergeAssemblies->'%(Filename)')" Importance="High" /> 

  <Exec Command="&quot;$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe&quot; /out:@(MainAssembly) &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ') /log:ILMerge.log" /> 

 </Target>

 <Target Name="_CopyFilesMarkedCopyLocal"/>

</Project>

次に、セットアップ プロジェクトに exe をプライマリ出力として含めず、それをファイルとして含め、そのローカライズされたリソースとコンテンツを含めます。

これはうまくいくと思いますが、アプリケーションのビルド後のイベント (ilmerge プロセス) をセットアップ exe にパックする前に実行できなかったのは残念です。

于 2008-11-07T12:45:47.090 に答える