3

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

构建 A,然后在构建后:

  1. 加密 A->B,
  2. 德尔/法,
  3. 重命名 B A。

我似乎无法在加密后删除原始输出文件,因为安装程序项目(或者项目本身?)似乎有文件锁定。我尝试强制删除,但它不仅仅是一个只读属性,而是一个完整的锁定。有没有办法解决这个问题?

4

3 回答 3

3

我知道旧帖子,但万一有人登陆这里......

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

我在构建前和构建后脚本中多次看到文件被简单地引用,例如:

del $(ProjectDir)UnwantedFile.txt

当项目移动到不同的位置时,这可能会工作很长时间,然后才会平息,因为该del命令不喜欢路径中有空格。

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

del "$(ProjectDir)UnwantedFile.txt"

任何时候使用路径变量时,都应该将整个路径用引号括起来,因为您不知道将来可能会在路径中引入空格。

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

Encrypt "$(A)"->"$(B)"
del /F "$(A)"
rename "$(B)" "$(A)"
于 2015-05-25T07:59:51.610 回答
2

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

于 2009-06-29T15:57:57.303 回答
0

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

于 2009-06-29T16:34:45.523 回答