2010-07-23 246 views
1

我有一個解決方案,我正在從Visual Studio 2005遷移到2010年。在開發人員機器上的IDE內部,一切正常,但我的建立服務器(與CC.NET)給我一個錯誤。使用MSBUILD構建項目構建最新的,未指定的項目(.NET 4)

我有大約10個項目,其中3個由於使用無符號引用而未命名。

其中一個(簽名)有一個InternalsVisibleTo另一個簽名的項目。

在IDE中,我使用Debug/Release配置,該配置延遲簽署所有要強名稱的項目。

我還創建了Debug_Signed和Debug_Unsigned配置(和相應的Release_ *),它們只構建相應的項目。

在我的構建服務器中,我使用實際的私鑰先構建Debug_Signed配置,然後再次在Debug_Unsigned配置上使用SingAssembly = false調用MSBUILD。

這工作完全正常使用.NET 2.0 SDK,但現在第一個MSBUILD工作正常,但然後第二個MSBUILD試圖重建簽名的項目(因爲他們被無符號項目引用),我得到一個錯誤一個程序集具有InternalsVisibleTo簽名程序集,而生成的程序集未簽名:

錯誤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構建的引用程序集,而不是試圖重建它們。

構建服務器只有.NET 4.0運行時(不是SDK),我不得不復制兩個.targets文件(用於SQL/CLR和Web應用程序)。但由於一切似乎都很好,我不認爲這會是一個問題。

有沒有人有任何想法我可以做什麼?

謝謝,

路易斯阿隆索拉莫斯

+0

我很好奇,如果你切換它們的構建順序會發生什麼。 – 2010-08-04 07:17:35

+0

@Sayed:我做不到,因爲未簽名的項目取決於簽名的項目(如果它取決於未簽名的項目,則不能簽署程序集)。 – 2010-08-07 02:38:36

+0

我解決了這個問題。這是我做過什麼: 當運行MSBUILD兩者的簽名和簽名的程序集,我指定三個屬性: SignAssembly = TRUE/FALSE; DelaySign = FALSE; AssemblyOriginatorKeyFile = d:\等等\ blah.snk 事情是將這些屬性應用於整個解決方案,覆蓋個別項目的設置。 我所做的只是指定DelaySign和密鑰文件屬性,而沒有指定SignAssembly。 這樣,待簽名的程序集仍然是簽名的(使用新的非延遲簽名設置),不應簽名的程序集不是。 – 2010-08-07 02:42:57

回答

1

(複製爲從上方Luis的評論的答案)

當運行MSBUILD爲任一無符號或簽名的程序集我被指定三個屬性:

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

這些屬性應用於整個解決方案,覆蓋個別項目的設置。我所做的只是指定DelaySign和密鑰文件屬性,而未指定SignAssembly。這樣,要簽名的程序集仍然是簽名的(使用新的非延遲簽名設置),不應簽名的程序集不會。