2017-03-21 84 views
11

前一段時間,我開發了一個自定義TFS簽入策略,即可與Visual Studio 2015一起正常工作。 現在我安裝了Visual Studio 2017,希望像以前一樣使用VS2015註冊簽入策略組件。但這不起作用。 如何使用VS2017註冊自定義簽入策略程序集?Visual Studio 2017中的自定義TFS簽入策略

對於VS2015,我有這些註冊表項:

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\TeamFoundation\SourceControl\Checkin Policies] 
"MyCheckInPolicy"="C:\\Program Files\\My\\MyCheckInPolicy.dll" 

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0_Config\TeamFoundation\SourceControl\Checkin Policies] 
"MyCheckInPolicy"="C:\\Program Files\\My\\MyCheckInPolicy.dll" 

,並相應地我說那些鍵VS2017(15.0):

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\15.0\TeamFoundation\SourceControl\Checkin Policies] 
"MyCheckInPolicy"="C:\\Program Files\\My\\MyCheckInPolicy.dll" 
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\15.0_Config\TeamFoundation\SourceControl\Checkin Policies] 
"MyCheckInPolicy"="C:\\Program Files\\My\\MyCheckInPolicy.dll" 

但不幸的是這不起作用:

  • 如果我打開團隊項目SourceControl設置,進入「簽入策略」選項卡,並嘗試添加...政策,MyCheckInPolicy不會出現
  • 如果我打開已使用此簽入策略的團隊項目並執行上述操作,我收到一條錯誤消息,告訴我該程序集(mycheckinpolicy)「尚未註冊」。

當然,我在註冊表更改後重新啓動了IDE,但是即使是我的機器rebooting也沒有幫助。

information我迄今發現似乎表明,簽入策略,現在必須延長(VSIX),我不想相信的一部分。


我想這個問題來自一些在將程序集加載到IDE時無法解析的引用。

MyCheckInPolicy項目引用來自VS2015文件夾C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team ExplorerMicrosoft.TeamFoundation.VersionControl.Client.dll v14.0。
我試圖從VS2017文件夾中引用相應的DLL,但是然後程序集不能在這兩個 IDE中工作。

我也嘗試使用Nuget包「Microsoft.TeamFoundation.VersionControl.All」v12.0.30723.2來代替,並將輸出目錄中的所有文件(其中似乎包含該包的所有程序集)部署到提到的位置在註冊表項中。這有同樣的結果:無法在VS2015和VS2017中加載策略。

我們使用的是TFS 12.0.30723.0


如此看來VS2017甚至沒有嘗試加載程序集和不關心的註冊表項?

回答

15

在Visual Studio 2017中有breaking changes可擴展性。大部分註冊表配置已經移動到一個「私人」註冊表:

爲了減少對註冊表的影響時,Visual Studio現在使用 RegLoadAppKey功能存儲註冊表項中的私人二進制文件 之下%VsAppDataFolder %\ privateregistry.bin。系統註冊表中只保留了一小部分特定於Visual Studio特定密鑰的 。 (link

通過定義註冊表項,在VSIX一個.pkgdef文件的一部分,在安裝VS - 2017年(我認爲)寫的鑰匙私有註冊,而不是實際的註冊表,這是在以前版本的VS中的情況。這將允許政策被拿起。

所以,這裏是我所經歷的步驟,以獲得我們的政策在2017年VS工作:

  1. 安裝Visual Studio SDK(可通過modifying安裝完成,如果你沒有選擇的工作量本來)。
  2. 添加新VSIX項目您簽入策略的解決方案
  3. 一個.pkgdef文件添加到VSIX項目具有以下(這是註冊表鍵值項):

    [$RootKey$\TeamFoundation\SourceControl\Checkin Policies] "YourPolicy"="$PackageFolder$\YourPolicy.dll"

  4. 修改使用VSIX項目中的source.extension.vsixmanifest(使用GUI嚮導):

    1. 安裝目標:添加您的最低支持VS版本:
      • Microsoft.VisualStudio.Community [15.0,16.0)
      • Microsoft.VisualStudio.IntegratedShell [15.0,16.0)
    2. 資產:
      • Microsoft.VisualStudio.Assembly
        • 一個項目,目前的解決方案
        • 項目:選擇您的簽入政策冰雪項目
      • Microsoft.VisualStudio.VsPackage上的文件系統
        • 文件
        • 路徑:從第3步選擇.pkgdef文件。
    3. 先決條件:Visual Studio core editor [15.0,16.0)
  5. 構建VSIX項目和分發/安裝生成的VSIX

This GitHub庫是爲拼湊在一起的一切有益的。遷移到vsix時發現的一些怪癖:

  1. 默認情況下,vsix安裝現在是每個用戶。如果您在同一臺機器上的多個用戶下操作VS,則需要爲每個用戶安裝它。 vsixmanifest中有一個選項可以爲所有用戶安裝擴展程序,但這需要提升。
  2. 我們的簽入策略使用了一個app.config文件,這在vsix中不受支持。我必須migrate我們的設置爲.settings文件。
+2

謝謝你soo!我仍然不得不將引用的dll更改爲VS2017版本(不知道爲什麼nuget包的方式不起作用),但您的傑出解釋完美無缺! VS2017還有一些問題,如自定義編輯器的tfs構建定義......但這些都是另一天的問題......再次感謝。 –

+0

沒問題,很樂意幫忙。由於沒有任何東西,我只是經歷了昨天工作的痛苦。 –

+0

我試着在你的步驟之後創建一個新的檢查策略(謝謝你!),但我無法在Visual Studio中找到我的策略。我想要的是一個簡單的策略,用於檢查所有待處理的更改文件中的某個單詞,如果出現該單詞,則檢入應該失敗。也許已經有可能使用標準工具?提前致謝 ! – Lumo

0

它的工作對我來說加入這個關鍵HKCU:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\15.0\TeamFoundation\SourceControl\Checkin Policies 

希望它能幫助。 謝謝, Wilsade

相關問題