有没有办法在后期构建事件中删除输出文件

时间:2009-06-29 15:50:14

标签: visual-studio-2008 file-io installer post-build-event filelock

我正在尝试在.NET版本上运行构建后批处理文件,该文件加密输出文件,删除原始文件,然后将加密版本重命名为原始输出文件名。即:

构建A,然后在构建后:

  1. 加密A-> B,
  2. DEL / F A,
  3. RENAME B A。
  4. 我似乎无法在加密后删除原始输出文件,因为它似乎是安装程序项目(或者项目本身?)上的文件锁定。我试图强制删除,但它不仅是一个只读属性,而是一个完整的锁定。有没有办法解决这个问题?

3 个答案:

答案 0 :(得分:2)

这是一个视觉工作室问题。它通常会在整个地方泄漏文件锁。您可以考虑直接使用MSBuild在Studio外部运行构建。

答案 1 :(得分:2)

我知道的旧帖子,但万一有人在这里降落......

OP没有给出错误消息,所以我们不确定它是否由于文件锁定而失败。

我在构建前脚本和构建后脚本中多次看到文件的引用简单如下:

del $(ProjectDir)UnwantedFile.txt

当项目移动到不同的位置时,由于del命令不喜欢路径中有空格,因此可以长时间工作,然后将其平放在脸上。

用双引号括起来,它会一直有效:

del "$(ProjectDir)UnwantedFile.txt"

每当你使用路径变量时,你应该用引号包装整个路径,因为你不知道将来可能会在你的路径中引入空格。

对于这篇文章,更好的版本是:

Encrypt "$(A)"->"$(B)"
del /F "$(A)"
rename "$(B)" "$(A)"

答案 2 :(得分:0)

输出文件是DLL还是一些内容? Visual Studio项目引用以锁定程序集项目的主输出(在某些情况下为DLL,EXE)。确保您知道哪个进程保持文件打开句柄,可能是在尝试重命名之前运行SysInternals Handle Utility。如果它是保存文件的devenv.exe,我不知道你能做些什么,除了可能让安装程序拉入重命名的文件而不是输出文件。