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

Visual studio 2015 无法签署C++/Visual Studio 2015中的CLI程序集,visual-studio-2015,c++-cli,Visual Studio 2015,C++ Cli,使用Visual Studio 2015,使用2015工具集:当我尝试直接对程序集签名时,如下所示: 签名始终失败,并出现以下错误: LNK1346 ALINK操作失败(80040436):对程序集进行签名时出错--该进程无法访问该文件,因为它正被另一个进程使用。 同样的程序集也可以在VisualStudio2013中签名(我今天刚刚升级了它) 这是2015年的一个已知问题吗(当我搜索该错误时找不到任何bug)?还是我做错了什么 编辑:解决方法 这似乎是另一个McAfee AV错误。但是,还有

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

签名始终失败,并出现以下错误:
LNK1346 ALINK操作失败(80040436):对程序集进行签名时出错--该进程无法访问该文件,因为它正被另一个进程使用。

同样的程序集也可以在VisualStudio2013中签名(我今天刚刚升级了它)

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

编辑:解决方法

这似乎是另一个McAfee AV错误。但是,还有另一种方法可以对文件进行签名,这可能会给McVirus足够的时间来释放它已取出的锁

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

进程无法访问该文件,因为其他进程正在使用该文件

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

签署是一个分两步的过程。第一个link.exe必须生成可执行文件,这是为文件计算SHA256哈希所必需的。然后ALINK(托管链接器)重新打开该文件以添加签名。它必须与计算机上运行的、对文件感兴趣的其他进程进行斗争。当一个可执行文件似乎不知从何处出现时,这种文件总是束手无策,坚持检查文件内容并在完成之前排除对文件的访问

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


您必须在反恶意软件产品中为生成目录进行排除。如果它是像Avast、AVG或ESET这样的具有攻击性的免费软件,那么计划尽快将其删除,这样它就再也不会困扰你了。Defender从不给我任何麻烦。

看起来好像有人能处理这个文件。我会假设VS中的另一个工具。最好的开始方式是确定“谁”拥有控制权。请检查procexp.exe,查看是否有任何其他进程对您尝试签名的文件具有打开的句柄。您的解决方法奏效了,将其作为问题的答案可能会很有用。另外,$(LinkKeyFile)宏似乎也能工作:sn-R$(TargetPath)$(LinkKeyFile)@Moop-谢谢,我已经更新了这个问题,以增加解决方法的重点。谢谢这个出色的解决方案!这让我疯狂了好几个月,因为链接器只是偶尔失败,然后它工作了几个小时,再次失败,我找不到原因。我们使用不同的病毒扫描器,但我想其他扫描器也会导致同样的问题。谢谢,听起来不错。我们的机器上有McVirus(Afee),它会弄乱很多东西。稍后,我将尝试在我的笔记本电脑上使用一个具有适当攻击性的进程杀手进行确认。让我困惑的是,为什么它在2013年运行良好,但在2015年却不行?link.exe和ALINK是否有重大更改?您永远无法得到诊断,例如,单个字节中的更改现在使其与病毒特征匹配,从而使扫描仪看起来更彻底。是否有任何方法可以监视文件上的锁定?Procexp不适用于短时间内锁定的锁,因此无法查看锁定文件的内容,资源监视器可能会拍摄系统范围的快照,这意味着它无法提供足够准确的图片。据我所知,这是不可能的,锁通常不会保持足够长的时间来尝试使用工具来诊断作恶者。好吧,最明显的方法就是听从我的建议,如果问题消失了,那么你就有了一个rockhard保证,那就是反恶意软件产品。