3

出力ファイルを暗号化して元のファイルを削除し、暗号化されたバージョンの名前を変更する.NETビルドでポストビルドバッチファイルを実行しようとしています元の出力ファイル名に変更します。すなわち:ポストビルドイベントで出力ファイルを削除する方法はありますか

ビルドA、その後、ビルド後で:

  1. 暗号化A-> B、
  2. DEL/FA、
  3. RENAME BのA.

私ができます」しかし、それはインストーラプロジェクト(または多分プロジェクト自体?)によってファイルロックがあるように思えるので、暗号化の後に元の出力ファイルを削除するようです。私は削除を強制しようとしましたが、それは単なる読み取り専用の属性ではなく、完全なロックです。これを回避する方法はありますか?

答えて

2

これはビジュアルスタジオの問題です。一般的に、ファイルロックはすべてその場所に漏れます。 MSBuildを直接使用して、スタジオ外でビルドを実行することを検討することもできます。

0

出力ファイルはDLLか一部のコンテンツですか? Visual Studioプロジェクトのreferencecendendを使用して、アセンブリプロジェクトのプライマリ出力(DLL、EXE)をロックします。名前を変更しようとする直前にSysInternals Handle Utilityを実行して、ファイルオープンハンドルを保持しているプロセスを確認してください。ファイルを保持しているdevenv.exeの場合は、出力ファイルではなく名前が変更されたファイルをインストーラで取得する以外に、あなたができることがわかりません。私が知っている場合には、誰もがここまでの土地

+0

出力ファイルは.dllファイルです。 –

2

古いポストは....我々はそれがあるため、ファイルロックの障害が発生していることを確かに知っていないので、OPによって与えられたエラーメッセージが

はありません。

私は、ファイルが単にように参照される前と後のビルドスクリプトで何度も見てきました

:これはプロジェクトがに移動したときにその顔の上に平らに落ちる前に長い時間のために働くことができる

del $(ProjectDir)UnwantedFile.txt 

delコマンドはパスにスペースがないのが好きではないため、別の場所です。

ラップ二重引用符で呼び出し、それはすべての時間を動作します:

del "$(ProjectDir)UnwantedFile.txt" 

あなたがパス変数を使用していつでもあなたはその中に分からないように、あなたが引用符でパス全体をラップする必要があります将来、スペースがあなたのパスに導入されるかもしれません。この記事のために

、より良いバージョンは次のようになります。

Encrypt "$(A)"->"$(B)" 
del /F "$(A)" 
rename "$(B)" "$(A)" 
関連する問題