【问题标题】:Building a project with MSBUILD builds up-to-date, not specified projects (.NET 4)使用 MSBUILD 构建项目会构建最新的、未指定的项目 (.NET 4)
【发布时间】:2010-07-23 17:03:17
【问题描述】:

我有一个解决方案,我正在从 Visual Studio 2005 迁移到 2010。在开发人员机器上的 IDE 中,一切正常,但我的构建服务器(使用 CC.NET)给了我一个错误。

我有大约 10 个项目,其中 3 个由于使用了未签名的引用而没有强命名。

其中一个(已签名)有一个 InternalsVisibleTo 另一个已签名项目。

在 IDE 中,我使用 Debug/Release 配置,它对所有要强命名的项目进行延迟签名。

我还创建了 Debug_Signed 和 Debug_Unsigned 配置(以及对应的 Release_*),它们只构建对应的项目。

在我的构建服务器中,我使用实际私钥首先构建 Debug_Signed 配置,然后在 SingAssembly=false 的 Debug_Unsigned 配置上再次调用 MSBUILD。

这使用 .NET 2.0 SDK 工作得非常好,但现在第一个 MSBUILD 工作正常,但随后第二个 MSBUILD 尝试重建签名项目(因为它们被未签名项目引用),我收到一个错误具有 InternalsVisibleTo 已签名程序集的程序集,而生成的程序集未签名:

错误 CS0281:朋友访问权限已授予“Sic.Gateway.Customers, PublicKey=0024...4bbe”,但输出程序集名为“Sic.Gateway.Customers, Version=2.0.0.796, Culture =中性,PublicKeyToken=null'。尝试添加对“Sic.Gateway.Customers, PublicKey=0024...4bbe”的引用或更改输出程序集名称以匹配。

我希望第二个 MSBUILD 使用第一个 MSBUILD 刚刚构建的参考程序集,而不是尝试重建它们。

构建服务器只有 .NET 4.0 运行时(不是 SDK),我必须复制两个 .targets 文件(用于 SQL/CLR 和 Web 应用程序)。但由于一切似乎都很好,我认为这不是问题。

有人知道我能做什么吗?

谢谢,

路易斯·阿隆索·拉莫斯

【问题讨论】:

  • 我很好奇如果你改变它们的构建顺序会发生什么。
  • @Sayed:我不能,因为未签名的项目依赖于已签名的项目(如果程序集依赖于未签名的项目,则无法签署程序集)。
  • 我解决了这个问题。这就是我所做的:在为未签名和已签名程序集运行 MSBUILD 时,我指定了三个属性: SignAssembly=true/false;DelaySign=False;AssemblyOriginatorKeyFile=D:\blah\blah.snk 事情是这些属性应用于整个解决方案,覆盖单个项目的设置。我所做的只是指定了 DelaySign 和密钥文件属性,而没有指定 SignAssembly。这样,要签名的程序集仍然会被签名(使用新的非延迟签名设置),而那些不应该被签名的则不会。

标签: msbuild


【解决方案1】:

(复制为 Luis 上述评论的答案)

在为未签名或已签名程序集运行 MSBUILD 时,我指定了三个属性:

SignAssembly=true\false;DelaySign=False;AssemblyOriginatorKeyFile=D:\blah\blah.s‌​nk 

问题是这些属性应用于整个解决方案,覆盖各个项目的设置。我所做的只是指定了 DelaySign 和密钥文件属性,没有指定 SignAssembly。这样,要签名的程序集仍会被签名(使用新的非延迟签名设置),而那些不应该被签名的则不会。

【讨论】:

    猜你喜欢
    • 2010-11-25
    • 2021-03-07
    • 2010-11-15
    • 1970-01-01
    • 2019-09-28
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多