2011-07-21 48 views
61

我已經知道了這種技術:http://blogs.msdn.com/b/jjameson/archive/2009/04/03/shared-assembly-info-in-visual-studio-projects.aspx共享集信息爲整個溶液均勻版本

基本上它意味着與版本圍繞組件的信息,並添加此文件作爲鏈接到的所有項目創建SharedAssemblyInfo.cs該解決方案,所以實際文件只駐留在磁盤上的1個位置。

我的問題涉及2種情況:

  1. 現有的解決方案,不使用此機制:有沒有一種方法可以輕鬆地將ShareAssemblyInfo添加到所有項目? (可以說我有50個項目的解決方案)。

  2. 創建新項目時,默認情況下會創建一個新的AssemblyInfo.cs。不過,我想自動鏈接到SharedAssemblyInfo。

有沒有解決方案?常用的做法是什麼?

+0

常見的做法是創造出獨特的集信息 – VMAtm

回答

45

第一點可以用簡單的文本編輯器來解決,它可以一次處理多個文件並查找/替換。只需打開所有的csproj在它與

<Compile Include="..\SharedAssemblyInfo.cs"> 
    <Link>Properties\SharedAssemblyInfo.cs</Link> 
</Compile> 

替換字符串<Compile Include="Properties\AssemblyInfo.cs" />或者你可以寫一個這樣的工具:

var files = Directory.GetFiles(yourSolutionDir, "*.csproj", SearchOption.AllDirectories); 
foreach (var f in files) { 
    string contents = File.ReadAllText(f); 
    string result = contents.Replace("<Compile Include=\"Properties\\AssemblyInfo.cs\" />", putSecondStringHere_ItIsJustTooLong); // :) 
    File.WriteAllText(f, contents); 
} 

至於第二個問題......你可以看看Visual Studio custom project templates,但我不確定這值得付出的努力。你應該寫海事組織測試,而不是檢查。它會簡單得多,結果實際上幾乎是一樣的。

UPD:關於根據某些自定義規則編寫用於檢查解決方案/項目文件的測試。基本上,sln/csproj格式足夠簡單,可以毫不費力地進行解析。所以如果你想把SharedAssemblyInfo.cs鏈接到每個項目中 - 只需解析csproj並檢查它。然後將該檢查器放入構建服務器中,並在每個構建中運行它。我們目前有這樣的系統工作,花費大約兩天的時間編寫,但爲我們節省了更多(我們有更復雜的規則和多解決方案項目,所以這是值得的努力)。

我現在不會在這裏詳細介紹這個檢查(不是那麼簡短),但是我很快就會寫博客文章 - 很可能直到本週結束。所以,如果你有興趣 - 只需稍後檢查my blog :)

UPD:Here它是。

+0

#1 - 我同意這個可以用文本編輯器來完成。我想知道是VS本身以某種方式支持這一點。 (順便說一句 - EditPad Pro比Notepad ++在你看來更好嗎?)#2 - 編寫一個測試來檢查它,你的意思是什麼? –

+0

是的,EditPad Pro更好的IMO。至少當我上次檢查N ++時肯定會更好。它也不是免費軟件,所以你應該認爲自己是否需要它。 –

+0

我已經更新了關於第二點的一些細節的答案。 –

46

可以鏈接到VS 2010中的共享程序集信息文件。Ashish Jain有一篇很好的關於它的博客文章:Sharing assembly version across projects in a solution

在解決方案級別創建共享程序集信息文件後,他從一個項目鏈接到它的說明是:

  1. 右鍵單擊該項目,要在其中添加共享 彙編文件,然後選擇Add - > Existing Item ...

  2. 從解決方案文件夾中選擇文件「SharedAssemblyInfo.cs」。

  3. 而不是相加的,點擊旁邊的添加,然後單擊箭頭「添加爲 鏈接」

  4. 向下拖動添加鏈接的文件一起在 同一文件夾中的AssemblyInfo.cs。

  5. 對於您希望爲其添加共享的所有項目重複步驟1 - 4 彙編文件。

我已經試過這和它的作品。

+3

謝謝你解釋我忽略的小箭頭! –

+8

無需重複步驟1-4。您可以將鏈接文件從第一個項目拖到下一個項目。這會將鏈接文件複製到下一個項目。 – ristaloff

+1

您也可以通過替換所有* .csproj文件中的文本來完成。更新一個項目,比較新的和舊的csproj文件中的結果,並在解決方案中的所有其他項目上進行比較;) – Ludwo

0

我已經創建了一個應用程序來自動增加文件版本。

  1. 下載Applicaiton
  2. 添加以下行預生成事件命令行

C:\ TEMP \ IncrementFileVersion.exe $(SolutionDir)\屬性\ AssemblyInfo.cs中 生成項目 爲了保持簡單,應用程序僅在出現錯誤時拋出消息,以確認其工作正常,您將需要檢查「組裝信息」中的文件版本

注意:您將不得不rex在Visual Studio中爲「Assembly Information」按鈕添加解決方案以填充字段,但是您的輸出文件將具有更新版本。

對於建議和要求,請發送電子郵件至我[email protected]