24

さまざまな理由から、ilmerge を使用してすべてのアプリケーション アセンブリを 1 つのファイルにまとめ、ユーザーは 1 つのファイルだけを処理する必要があります。残念ながら、.pdb ファイルをアセンブリとマージする方法はないようです。誰でもそれを回避する方法を知っていますか?

4

1 に答える 1

32

わかりました、しばらく時間がかかりましたが、これを理解しました。

その記事には /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="&quot;..\..\Libraries\Ilmerge.exe&quot; /copyattrs /allowMultiple /out:&quot;@(MainAssembly)&quot; &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ')" />
    <Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" />
  </Target>

完全を期すために、最新バージョンの ilmerge.exe: バージョン 2.10.219.0 を使用しています。最終更新日は 2010 年 2 月 19 日 9:49 AM です。

于 2010-02-25T20:28:05.110 に答える