Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MSBUILD生成项目将生成最新的、非指定的项目(.NET 4)_Msbuild - Fatal编程技术网

使用MSBUILD生成项目将生成最新的、非指定的项目(.NET 4)

使用MSBUILD生成项目将生成最新的、非指定的项目(.NET 4),msbuild,Msbuild,我有一个从VisualStudio2005迁移到2010的解决方案。在开发人员机器上的IDE中,一切正常,但是我的构建服务器(带有CC.NET)给了我一个错误 我有大约10个项目,其中3个由于使用未签名的引用而没有强名称 其中一个(已签署)对另一个已签署项目具有内部可视性 在IDE中,我使用Debug/Release配置,它延迟对所有要强命名的项目进行签名 我还创建了Debug_-Signed和Debug_-Unsigned配置(以及相应的发行版),它们只构建相应的项目 在生成服务器中,我首先使

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

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

其中一个(已签署)对另一个已签署项目具有内部可视性

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

我还创建了Debug_-Signed和Debug_-Unsigned配置(以及相应的发行版),它们只构建相应的项目

在生成服务器中,我首先使用实际私钥生成Debug_签名的配置,然后使用SingAssembly=false再次调用Debug_Unsigned配置的MSBUILD

这在使用.NET 2.0 SDK时工作得非常好,但是现在第一个MSBUILD工作得很好,但是第二个MSBUILD尝试重新生成已签名的项目(因为它们被未签名的项目引用),并且我收到一个错误,关于一个程序集在生成的程序集未签名时对已签名的程序集具有内部可见性:

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

我希望第二个MSBUILD使用第一个MSBUILD刚刚生成的引用程序集,而不是尝试重新生成它们

构建服务器只有.NET4.0运行时(不是SDK),我必须复制两个.targets文件(用于SQL/CLR和web应用程序)。但既然一切看起来都很好,我不认为这会是一个问题

有人知道我能做什么吗

谢谢

路易斯·阿隆索·拉莫斯

(作为以上路易斯评论的答案复制)

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

SignAssembly=true\false;DelaySign=False;AssemblyOriginatorKeyFile=D:\blah\blah.s‌​nk 
问题是这些属性应用于整个解决方案,覆盖单个项目的设置。我所做的只是指定DelaySign和密钥文件属性,而没有指定SignAssembly。这样,将要签名的程序集仍会被签名(使用新的非延迟签名设置),而不应签名的程序集则不会被签名。

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

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

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

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

我很好奇,如果您切换它们的生成顺序,会发生什么情况。@Sayed:我不能,因为未签名的项目依赖于已签名的项目(如果程序集依赖于未签名的程序集,则无法对其进行签名)。我解决了这个问题。这就是我所做的:在为未签名程序集和已签名程序集运行MSBUILD时,我指定了三个属性:SignAssembly=true/false;DelaySign=false;AssemblyOriginationyFile=D:\blah\blah.snk问题是这些属性应用于整个解决方案,覆盖了各个项目的设置。我所做的是:as仅指定DelaySign和密钥文件属性,而不指定SignAssembly。这样,将要签名的程序集仍将被签名(使用新的非延迟签名设置),不应该签名的则不应该。我很好奇,如果您切换它们的生成顺序会发生什么情况。@Sayed:我不能,因为未签名的项目依赖于已签名的项目(如果程序集依赖于未签名的程序集,则无法对其进行签名)。我解决了这个问题。这就是我所做的:在为未签名程序集和已签名程序集运行MSBUILD时,我指定了三个属性:SignAssembly=true/false;DelaySign=false;AssemblyOriginationyFile=D:\blah\blah.snk问题是这些属性应用于整个解决方案,覆盖了各个项目的设置。我所做的是:as仅指定DelaySign和密钥文件属性,而不指定SignAssembly。这样,要签名的程序集仍会被签名(使用新的非延迟签名设置),而不应该被签名的程序集不会被签名。