【问题标题】:How to public sign a project with MSBuild如何使用 MSBuild 公开签署项目
【发布时间】:2021-05-02 14:36:46
【问题描述】:

我有一个 C# .NET Framework 项目,我使用本地系统上的 .pfx 文件对其进行签名。在.csproj 文件中设置了以下属性:

<PropertyGroup>
  <SignAssembly>true</SignAssembly>
</PropertyGroup>
<PropertyGroup>
  <AssemblyOriginatorKeyFile>keyfile.pfx</AssemblyOriginatorKeyFile>
</PropertyGroup>

此文件是开源项目的一部分。我正在尝试创建一个在某些提交上运行的管道。当我提交某些内容时,可以使用存储为 GitHub 机密的密码来安装原始的 *.pfx。问题是,当分叉的 repos 发出拉取请求时,管道会失败,因为它们无法使用 GitHub 机密。

长话短说,我发现我可以为此目的使用public signing。但是,当我尝试使用

构建我的项目时
msbuild src\TcBlackCore\TcBlackCore.csproj -t:Rebuild -p:DelaySign=false -p:PublicSign=true -p:Configuration=Release -p:Platform=AnyCPU -p:TreatWarningsAsErrors=true

我收到以下错误:

CS7102:编译选项“PublicSign”和“CryptoKeyContainer”不能同时指定

除了提到的one GitHub issue 之外,我找不到有关此错误代码的任何信息:

ERR_MutuallyExclusiveOptions CS7102

这里有哪些互斥选项? DelaySign 应设置为docs。我应该怎么做才能让公共签名生效,以便可以构建分叉的 repos?

> msbuild -version
Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework

【问题讨论】:

    标签: c# .net msbuild


    【解决方案1】:

    公共签名的问题在于编译器应用公共密钥时,实际上并没有对程序集进行签名。它就像组件上的“标记”。

    在您的情况下,您不能同时使用CryptoKeYContainerPublicSign,因为它们所做的事情几乎相同,因此编译器会提示错误。

    出于您的目的,我建议使用 DelaySign - 正如 Microsoft 文档所述:

    使用DelaySign - 如果你想要一个完全签名的程序集。使用DelaySign 如果您只想将公钥放在程序集中

    标记为:

    &lt;DelaySign&gt;true&lt;/DelaySign&gt;

    【讨论】:

    • 感谢它的工作!虽然单元测试现在不运行。我将删除整个已签署的业务。它引起了很多头痛。
    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多