17

私のVisualStudioソリューションには、Webアプリケーションと単体テストアプリケーションが含まれています。私のWebアプリケーションはlog4netを使用しています。コマンドラインからmsbuildを使用してソリューションを構築できるようにしたいと考えています。ただし、コマンドラインからソリューションをビルドすると、log4net.xmlをテストプロジェクトのbinディレクトリにコピーできないため、ビルドエラーが発生します。

エラーメッセージは次のとおりです。

「ファイル'\bin\log4net.xml'を'bin\ Debug\log4net.xml'にコピーできません。パス'\bin\log4net.xml'へのアクセスが拒否されました。」

Visual Studioがこのファイルをロックしているように見えますが、なぜロックする必要があるのか​​わかりません。VSがロードしたプロジェクトのXMLドキュメントファイルをロックしないようにする方法はありますか?

4

5 に答える 5

8

次の解決策を見つけました: VS ポストビルド イベントまたは NAnt/MSbuild スクリプトで cmd スクリプトを実行します。

handle.exe -p devenv [Path to the folder with locked files] > handles.txt

FOR /F "skip=5 tokens=3,4 delims=: " %%i IN (handles.txt) DO handle -p %%i -c %%j -y

handle.exe はhttp://technet.microsoft.com/en-us/sysinternals/bb896655.aspxから入手できます。

スクリプトの 1 行目は、VS によってロックされたファイルのすべてのハンドルを handles.txt にダンプします。2 行目は、ファイルからハンドル ID を読み取り、ハンドルを強制終了します。

スクリプトが実行された後、ファイルは削除/置換/移動されます。

于 2010-10-19T15:27:10.793 に答える
2

/p:AllowedReferenceRelatedFileExtensions=none出力から xml ファイルと pdb ファイルを完全に省略しても問題ない場合は、コマンド ラインで msbuild に渡すことができます。

(関連する回答に感謝https://stackoverflow.com/a/8757941/251011

編集:このエラーが発生している dll ファイルにも問題がある場合は、最近、環境変数の解決策を発見しました: https://stackoverflow.com/a/23069603/251011

于 2014-03-25T19:32:01.673 に答える
1

クリステンは次のように書いています。

このファイルを別のディレクトリにドロップしてそこから参照するか、それを使用するコードをライブラリに配置し、ビルド後のイベントでそのファイルを bin ディレクトリにコピーしてから参照することができます。

xml ファイルのロックの問題は、プロジェクトの bin ディレクトリではなく、外部参照ディレクトリにあります。新しいバージョンが利用可能な TortoiseSVN->Update を実行するとヒットします。VSがインテリセンスにファイルを使用しているためだと仮定します。

TortoiseSVN->Update が原因でこのロックの問題が発生した場合は、現在、問題のあるファイルを更新前に削除する更新前フックを試しています (更新が必要ない場合は復元されます)。動作しているように見えますが (これは奇妙です)、確実に言えるほど徹底的にテストしていません。信頼できることが証明された場合、この回答を更新します。

MSがVS 2010で修正することを願っています。

于 2009-12-10T00:40:41.923 に答える
0

基本的に、ファイルを bin フォルダーにチェックインしないでください。これは悪い考えです。

このファイルを別のディレクトリにドロップしてそこから参照するか、それを使用するコードをライブラリに配置し、ビルド後のイベントでそのファイルを bin ディレクトリにコピーしてから参照することができます。

Msbuild はそれを webprojects の bin ディレクトリにコピーします:)

これらの種類のロックの問題を回避するために、bin ディレクトリをまったくチェックインしないか、そこに .refresh ファイルを入れる必要がある場合を除き、bin ディレクトリにチェックインする人々にはまさにこの問題があります。

返事が少し遅くなりました、すみません:)

于 2009-11-12T11:44:07.963 に答える