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)可以作为构建后事件运行以完成签名。 这对我和@Moop都有效。
-
看起来有人可以处理该文件。 我会假设VS中有另一个工具。 最好的开始方法是确定谁拥有手柄。 检出procexp.exe,看看是否有其他进程对您要签名的文件具有打开的句柄。
-
您的解决方法成功了,将其变成问题的答案可能会很有用。 此外,$(LinkKeyFile)宏似乎可以正常工作:sn -R $(TargetPath)$(LinkKeyFile)
-
@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之类的激进免费软件,则计划尽快删除它,以使其永远不会再打扰您。防御者永远不会给我带来任何麻烦。
-
谢谢,听起来不错。我们的计算机上安装了McVirus(Afee),杂乱无章。稍后,我将尝试在笔记本电脑上确认具有适当攻击性的过程杀手。让我感到困惑的是,为什么它在2013年能正常运行,而在2015年却不能运行? link.exe和ALINK是否进行了重大更改?
-
例如,您永远无法获得针对单个字节的更改的诊断信息,该更改现在使其与病毒签名相匹配,从而使扫描仪看起来更加彻底。
-
有什么方法可以监视对文件采取的锁定? Procexp不适用于短时间的锁定,因此无法看到正在锁定文件的内容,并且资源监视器可能会获取系统范围的快照,这意味着它无法提供足够准确的图像。
-
并不是我所知道的,锁通常不会保持足够长的时间,以至于无法使用工具来诊断邪恶者。好吧,最明显的方法就是听从我的建议,如果问题消失了,那么您就可以坚决保证这是反恶意软件产品。