我正在尝试在.NET版本上运行构建后批处理文件,该文件加密输出文件,删除原始文件,然后将加密版本重命名为原始输出文件名。即:
构建A,然后在构建后:
我似乎无法在加密后删除原始输出文件,因为它似乎是安装程序项目(或者项目本身?)上的文件锁定。我试图强制删除,但它不仅是一个只读属性,而是一个完整的锁定。有没有办法解决这个问题?
答案 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,我不知道你能做些什么,除了可能让安装程序拉入重命名的文件而不是输出文件。