【发布时间】: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