14

2 つのアセンブリを 1 つのアセンブリにマージしようとしていますが、これは問題なく動作します。しかし、*.pdb ファイルもマージしようとすると、エラーが発生します。

パス「F:\Fentec\Businessplan\trunk\Ausgabe\Debug\modules\Planrechnung\Planrechnung.pdb」へのアクセスが拒否されました。

*.pdb ファイルのマージをスキップするために /ndebug オプションを使用すると、問題なく動作します。もちろん、デバッグ中にシンボルをロードすることはできません。ビルド後のイベントで ILMerge を呼び出したとき、最初は Planrechung.pdb が使用中でロックされていると思いました。また、VS2010を閉じてコマンドラインからILMergeを呼び出してみましたが、結果は同じでした。ProcessExplorer で確認しましたが、ファイルにハンドルがありません。

これは私が ILMerge を呼び出す方法です:

E:\XP\Tools\ILMerge\ilmerge /targetplatform:v4,"D:\WINDOWS\Microsoft.NET\Framework\v4.0.30319" /lib:"F:\Fentec\Businessplan\trunk\Ausgabe\Debug\bin" /out:Planrechnung.dll "F:\Fentec\Businessplan\trunk\Ausgabe\Debug\modules\Planrechnung\Planrechnung.dll" "F:\Fentec\Businessplan\trunk\Ausgabe\Debug\modules\Mandantenverwaltung\Mandantenverwaltung.dll"

私は何かを逃しましたか?必要な追加情報がある場合は、お尋ねください。

こんにちは、
スカリ

4

2 に答える 2

29

問題の解決策を見つけましたが、少し恥ずかしいです。

出力名は、マージされた pdb ファイルのいずれかと同じ名前であってはなりません。そうしないと、この問題が発生します。アセンブリの名前を変更すると、うまくいきました。プロセスでアセンブリを上書きすることも問題ありませんが、既存の pdb ファイルを上書きすることはできません。
私はこれを期待していなかったし、偶然それを見つけました。ご面倒をおかけしてすみません

こんにちは、
スカリ

于 2011-09-07T08:30:19.757 に答える
0

おそらく、デバッガー (Visual Studio など) で使用されているため、.pdb ファイルがロックされているように思えます。

Visual Studio とアプリケーションの両方を閉じてみてください (まだ閉じていない場合)。

それでもうまくいかない場合は、Process Explorerなどのツールを使用して、そのファイルが開いているプロセスを検索します。プロセス エクスプローラーでは、[検索] -> [ハンドルの検索] または [DLL...] を使用してこれを行うことができます。

Process Explorer の検索ダイアログのスクリーンショット

検索しているファイル/pdb の名前を入力すると、そのファイルが開いているすべてのプロセスが一覧表示されます。個々のハンドルを閉じるか、それらのアプリケーションを強制終了/閉じて、もう一度やり直してください。

于 2011-09-06T13:45:39.183 に答える