无法在 Visual Studio 2015 中签署 C++/CLI 程序集

Cannot sign C++/CLI assembly in Visual Studio 2015

使用 Visual Studio 2015,使用 2015 工具集:当我尝试按如下方式直接签署程序集时:

签名总是失败并出现以下错误: LNK1346 ALINK operation failed (80040436) : Error signing assembly -- The process cannot access the file because it is being used by another process.

同一个程序集可以在 Visual Studio 2013 年签署(我今天刚刚升级它)。

这是 2015 年的已知问题吗(我搜索该错误时找不到任何错误)?还是我做错了什么?

编辑:解决方法

这似乎又是一个 McAfee AV 漏洞。但是,还有另一种签署文件的方法,可能会给 McVirus 足够的时间来释放它已取出的锁。

程序集可以延迟签名,sn -R $(TargetPath) $(LinkKeyFile) 可以 运行 作为 post 构建事件来完成签名。这对我和@Moop 都有效。

The process cannot access the file because it is being used by another process.

在我的机器上工作正常,这不是 VS2015 的问题。这是一个常见的环境问题,此错误消息是 Windows 感染了压缩包装恶意软件的机器上的标准悲剧。

签名分为两个步骤。首先 link.exe 必须生成可执行文件,这是为文件计算 SHA256 散列所必需的。然后文件被 ALINK(托管链接器)重新打开以添加签名。它必须与您机器上 运行 对文件感兴趣的其他进程进行斗争。当一个可执行文件看似不知从哪里出现时,总是把它的内衣捆绑在一起,并坚持检查文件内容并排除对该文件的访问,直到它完成。

当你使用延迟签名时似乎工作得很好,延迟通常足以让进程完成它的工作并释放文件上的独占锁。还有一些可能性 sn.exe 有点复杂,在放弃之前定期重试打开文件,ALINK 肯定不是。

您必须在您的反恶意软件产品中排除您的构建目录。如果它是某种激进的免费软件,如 Avast、AVG 或 ESET,那么计划尽快摆脱它,这样它就再也不会打扰你了。 Defender从不给我找麻烦