有没有一种方法可以在后期构建事件中删除输出文件?

4
我正在尝试在.NET构建过程中运行一个后期构建批处理文件,该文件对输出文件进行加密,删除原始文件,然后将加密版本重命名为原始输出文件名。例如:
构建A,然后在后期构建中:
1. 加密A->B, 2. DEL /F A, 3. 将B重命名为A。
但是,似乎无法在加密后删除原始输出文件,因为安装程序项目(或者可能是项目本身)对其进行了文件锁定。我尝试强制删除,但它不仅仅是只读属性,而是完全锁定。是否有任何方法可以解决这个问题?
3个回答

4

虽然这是一篇旧帖子,但如果有人看到此处……

由于没有错误消息,我们无法确定它失败是否因为文件锁定。

我曾经在构建脚本中看到很多次,文件被简单地引用:

del $(ProjectDir)UnwantedFile.txt

在将项目移动到不同位置时,由于del命令不喜欢路径中有空格,因此这种方法可能长时间有效,但最终会失败。

将调用命令用双引号括起来,就可以始终正常工作:

del "$(ProjectDir)UnwantedFile.txt"

任何时候使用路径变量,都应该将整个路径用引号括起来,因为你不知道未来是否会在路径中添加空格。
对于此帖子,更好的版本应该是:
Encrypt "$(A)"->"$(B)"
del /F "$(A)"
rename "$(B)" "$(A)"

2

这是Visual Studio的一个问题。它通常会在各个地方泄漏文件锁。您可以考虑通过直接使用MSBuild来在Studio外运行构建。


0

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


输出文件是一个 .dll 文件。 - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接