【问题标题】:Build error when signing with snk key使用 snk 密钥签名时生成错误
【发布时间】:2016-01-03 11:16:22
【问题描述】:

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

[Visual Studio 2015 中的错误]

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

http://i.stack.imgur.com/hKbbe.png

[TeamCity 中的错误]

  • CSC 错误 CS7027:使用文件“CompanyName.snk”中的公钥签署输出时出错——进程无法访问文件“C:\BuildAgents\Gamma\temp\buildTmp\tmpD91D.tmp”,因为它正被另一个进程。

http://i.stack.imgur.com/rbgHx.png

【问题讨论】:

  • 看起来像是多核构建的问题。您是否尝试过使用单个 MSBuild 实例(没有 /m 开关)构建您的解决方案?您是否尝试过诊断 MSBuild 的详细输出日志?您是否尝试确定哪个进程拥有临时文件?
  • 上周我开始在我们的 Jenkins 构建服务器上看到这个问题!我在构建时使用 4 个内核 (/m:4)。它似乎是随机发生的,并且每次都有不同的项目。我在本地从未遇到过错误。仅来自构建服务器。
  • 开始在我们的构建服务器中突然看到这一点,结果是 Windows Defender 的最新更新(2020 年 7 月),请参阅我的评论 here

标签: msbuild teamcity visual-studio-2015 snk


【解决方案1】:

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

有些工具使用 GetTempFileName,当 temp 文件很多时会报错

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

【讨论】:

  • 代理临时文件夹中的文件数量有限。这是您指的临时文件夹吗?
  • 正是这个。运行构建的用户 (C:\Users\USERNAME\AppData\Local\Temp) 的临时文件夹包含超过 65535 个文件。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    +1 @stukselbax 让我走上正轨 Also got help from this link

    【讨论】:

      【解决方案4】:

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

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

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

      希望这会有所帮助。

      【讨论】:

      • 会试一试,现在我刚刚删除了项目的签名。也解决了它作为一种解决方法:-)
      【解决方案5】:

      这可能是带有 Roslyn 编译器的this issue 实例。解决方法是添加

      <UseSharedCompilation>False</UseSharedCompilation>
      

      在 .csproj 文件中的任何 &lt;PropertyGroup&gt; 节点下。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2011-09-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-27
          • 1970-01-01
          • 2019-07-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多