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

bri*_*ler 5 c++-cli visual-studio-2015

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

签署C++/CLI程序集

签名总是失败,并出现以下错误: 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 build事件运行以完成签名.这适用于我和@Moop.

Han*_*ant 6

该进程无法访问该文件,因为该文件正在被另一个进程使用。

在我的机器上运行得很好,这不是 VS2015 的问题。作为一个常见的环境问题,此错误消息是感染了收缩包装恶意软件的 Windows 计算机上的标准悲剧。

签名过程分为两步。首先 link.exe 必须生成可执行文件,以便计算该文件的 SHA256 哈希值。然后,ALINK(托管链接器)重新打开该文件以添加签名。它必须与您计算机上运行的也对该文件感兴趣的其他进程进行斗争。当可执行文件看似不知从何而来时,总是会得到它的内裤,并坚持检查文件内容并排除对文件的访问,直到完成为止。

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

您必须在反恶意软件产品中对构建目录进行排除。如果它是某种攻击性免费软件,例如 Avast、AVG 或 ESET,那么计划尽快删除它,这样它就不会再打扰您了。后卫从来没有给我带来任何麻烦。