さまざまな理由から、ilmerge を使用してすべてのアプリケーション アセンブリを 1 つのファイルにまとめ、ユーザーは 1 つのファイルだけを処理する必要があります。残念ながら、.pdb ファイルをアセンブリとマージする方法はないようです。誰でもそれを回避する方法を知っていますか?
1 に答える
わかりました、しばらく時間がかかりましたが、これを理解しました。
その記事には /ndebug が正確に逆になっています。
ILMerge に付属のリリース ノート (ILMerge.doc、強調鉱山) から:
2.8 DebugInfo public bool DebugInfo { get; 設定; これが true に設定されている場合、ILMerge は出力アセンブリ用の .pdb ファイルを作成し、入力アセンブリ用に見つかった .pdb ファイルをそのファイルにマージします。 出力アセンブリ用に .pdb ファイルを作成しない場合は、このプロパティを false に設定するか、コマンド ラインで /ndebug オプションを指定します。デフォルト: true コマンド ライン オプション: /ndebug
解決策は、特にコマンドラインにそのフラグを付けないことです。ILMerge はデフォルトで pdb ファイルをマージします。ILMerge がそれらを見つけられるように、ソース アセンブリのすべての pdb ファイルが、関連する dll と一緒に同じディレクトリにあることを確認してください。(プロジェクト参照を使用しており、この要件を処理する ILMerge プロジェクトが 1 つあります。)
ILMerge csproj ファイルの関連セクションを次に示します。
<Target Name="AfterBuild">
<CreateItem Include="@(ReferencePath)" Condition="'%(CopyLocal)'=='true'">
<Output TaskParameter="Include" ItemName="IlmergeAssemblies" />
</CreateItem>
<Exec Command=""..\..\Libraries\Ilmerge.exe" /copyattrs /allowMultiple /out:"@(MainAssembly)" "@(IntermediateAssembly)" @(IlmergeAssemblies->'"%(FullPath)"', ' ')" />
<Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" />
</Target>
完全を期すために、最新バージョンの ilmerge.exe: バージョン 2.10.219.0 を使用しています。最終更新日は 2010 年 2 月 19 日 9:49 AM です。