使用 snk 密钥签名时出现构建错误

问题描述 投票:0回答:9

自使用 Visual Studio 2015 以来发生构建错误。在 Visual Studio 2015 中构建时,这种情况很少发生。在 TeamCity 中构建时,这种情况经常发生。

[Visual Studio 2015 中的错误]

  • 从文件“CompanyName.snk”中提取公钥时出错:该进程无法访问文件“C:\Users\UserName\AppData\Local\Temp mp2FF6.tmp”,因为它正在被另一个进程使用。 CompanyName.Project.DAL D:\Projecten\CompanyName\Repository\Source\Components\CompanyName.Project.DAL bc

https://i.sstatic.net/hKbbe.png

[TeamCity 中的错误]

  • CSC 错误 CS7027:使用文件“CompanyName.snk”中的公钥对输出进行签名时出错 - 该进程无法访问文件“C:\BuildAgents\Gamma emp uildTmp mpD91D.tmp”,因为该文件正在被另一个进程使用。

https://i.sstatic.net/rbgHx.png

msbuild teamcity visual-studio-2015 snk
9个回答
14
投票

我知道自从问这个问题以来已经有一段时间了,但是当我使用 SO 作为自己的参考时,我也遇到了这个问题,我想分享我的解决方案。

.snk 文件用于签署项目。您可能需要制作一个新的。

  • 右键单击您的项目,选择属性。
  • 单击“签名”。
  • 单击“签署程序集”旁边的复选框。
  • 在标有“选择强名称密钥文件”的下拉列表中单击新建。
  • 根据需要填写对话框,特别注明密钥文件名。当您按确定时,这将生成一个新的 .snk 文件。
  • 保存项目并重建。
  • 这将在您的项目中使用新的 .snk 并将解决 错误。

希望这有帮助。


4
投票

尝试清理构建使用的临时文件夹。 当临时文件夹有很多文件时,我遇到过不同类型的问题。

一些工具使用 GetTempFileName,当 temp 有大量文件时,它们会出现错误

如果使用 GetTempFileName 方法创建超过 65535 个文件而不删除以前的临时文件,则会引发 IOException。


2
投票

这可能是 Roslyn 编译器的此问题的一个实例。解决方法是添加

<UseSharedCompilation>False</UseSharedCompilation>

.csproj 文件中任意

<PropertyGroup>
节点下。


0
投票

当我将 Resharper 缓存移至系统温度时,它就开始了。当我将其移回解决方案文件夹时,问题就消失了,我可以再次构建。


0
投票

我也遇到了同样的问题。在 Visual Studio 2015 中,我使用以下步骤修复了该问题:

  1. 转到工具 > 选项
  2. 从“选项”对话框中,选择“项目和解决方案 > 构建并运行”
  3. 将“并行项目构建的最大数量”设置为 1

+1 给@stukselbax 让我走上正轨 还从此链接获得了帮助


0
投票

我在 csproj 文件中使用“/m:1”作为 msbuild 参数,并将“SignPublic”属性设置为 true。


0
投票

今天刚刚在 Visual Studio 2022 中遇到了这个问题 - 我弄乱了 csproj 文件,最终导致 snk 文件的文件路径错误。我通过将文件路径更改为正确来修复它。

  1. 右键项目->卸载(这样就可以编辑csproj文件了)

  2. <PropertyGroup>
    下检查
    <AssemblyOriginatorKeyFile>
    标签

  3. 我的代码是:

    <SignAssembly>true</SignAssembly> <AssemblyOriginatorKeyFile>../NAMEHERE.snk</AssemblyOriginatorKeyFile>
    NAMEHERE 特定于我的项目,您的会有所不同。查看你的 snk 文件。前面的 ../ 会有所不同,请检查您的 snk 文件的文件路径。如果您像我一样通过弄乱 csproj 文件而导致此错误,那么正确的答案是更改文件路径之前的内容。 :)

  4. 右键单击项目 -> 重新加载


0
投票

双击您的项目并设置为 false:

  <SignAssembly>false</SignAssembly> 
 <PublicSign>false</PublicSign>

删除此行:

 <AssemblyOriginatorKeyFile>CompanyName.snkk</AssemblyOriginatorKeyFile>

0
投票

我正在使用 Visual Studio 2022 构建一个开源项目。开源项目抛出此错误。 我不需要签署项目来进行测试。

在 Visual Studio 2022 中,右键单击该项目。 左键单击“属性”。 向下滚动到构建/强命名。 在对程序集进行签名下,取消选中对输出程序集进行签名以为其指定一个强名称。

构建项目,错误不再显示。

© www.soinside.com 2019 - 2024. All rights reserved.