在我們的商店中,我們使用Cruise Control & MSBuild作爲持續集成的一部分來自動化產品的構建。獲取InternalsVisible當構建過程用強名稱標記程序集時工作?
構建的一部分是對組件進行簽名,使其具有強名稱。
在我們的項目文件中,當我們在本地開發時,它沒有指定簽名,因爲這被MSBuild腳本覆蓋。
這是一切順利,直到我決定我想介紹單元測試,需要我使用InternalsVisibleTo
屬性。我也開始使用一個很好的開源庫,它有單元測試也使用這種技術。
這意味着,我的機器上,我可以更新AssemblyInfo.cs
使用下面的語句:
[assembly: InternalsVisibleTo("MyProject.Tests.UnitTests")]
,一切都很好。
然而,在休息選中此構建因爲構建機簽署組件,該行需要被更新到這個樣子,而不是:
[assembly: InternalsVisibleTo("MyProject.Tests.UnitTests,
PublicKey="magic key here..)"]
我有點想不籤的組件並稱它爲一天。然而,「簽署程序集是一個最佳實踐」(重複這個咒語3次),如果我們從這樣做中獲得任何好處,我不想遠程它。
我們不會安裝到GAC,我們並不特別擔心篡改,不必擔心使用我們的庫的第三方,我們在更新應用程序時立即更新所有文件。最可識別的好處是支持的人不能將程序集的某些隨機版本複製到運行時文件夾中,並讓事情看起來能夠工作一段時間。
我不想打開所涉及的作品罐,並手動更改100個項目文件以啓用簽名。我也不想通過標記內部應該公開的東西來解決問題,我不希望進入綁定重定向&我不想刪除單元測試。
我希望所有的強名都沒有強名,並且有強名的好處(如果有的話),我不想創造大量額外的工作來完成它。那是過分的要求?
這篇文章描述的問題和解決好了,但我沒有太大的MSBuild的腳本傢伙趁它:
http://social.msdn.microsoft.com/forums/en-US/msbuild/thread/02df643c-956a-48bd-ac01-4a1016d91032/
什麼是解決這個問題的妥善解決?
歡迎提供任何意見和建議。
謝謝托馬斯,我會嘗試這一點,並會接受它作爲答案,一旦我得到它的工作。有一些問題需要強力在任何地方進行簽名,主要是因爲我不確定如何編寫腳本,我不想手動完成。我們現有的構建腳本,是由比我更熟悉MSBuild的人編寫的,我只是稍微調整一下,而不是引入重大變化。 – Wes
我從來沒有這樣做過,但我會將其標記爲答案。 沒有用的東西是名爲AssemblyInfoFiles的ItemGroup ...它總是空的......任何想法爲什麼?包含模式基本上是你發佈的... 謝謝! – Wes
上述ItemGroup假定要修補的AssemblyInfo.cs文件位於構建腳本下的目錄中; **通配符將匹配當前目錄下的任何目錄。有關MSBuild包含語法的更多信息,請參見[如何:選擇要構建的文件](http://msdn.microsoft.com/zh-cn/library/ms171454.aspx)。 –