2012-09-07 36 views
3

NuGet文檔描述了VS模板中定義的包文件的兩個可能的存儲庫:1)在VSIX中,或2)在模板中。還有「已安裝」軟件包的註冊表的第三個選項。VS與公共NuGet包的項目模板

我們有定製的項目模板,它將使用尚未在註冊表中定義的公開可用的NuGet包。它會使VSIX和/或模板膨脹太多以至於不能包含nupkg文件。是否有一些隱藏的選項或技巧允許存儲庫改爲指向由Visual Studio用戶定義的軟件包源?

回答

2

由於我沒有找到任何簡單的「訣竅」,我根據這個討論編寫了一個自定義項目嚮導 - http://nuget.codeplex.com/discussions/385955

包源可以通過PackageSourceProvider找到,它可以通過MEF與PackageInstaller一起導入。然後創建從包源信息庫,並將其傳遞給安裝程序:

var factory = NuGet.PackageRepositoryFactory.Default; 
var packageSources = PackageSourceProvider.LoadPackageSources().Select(s => s.Source).ToList(); 
var repository = new AggregateRepository(factory, packageSources, true); 
NuGetPackageInstaller.InstallPackage(repository, project, package.Id, package.Version, false, false); 

調用InstallPackage直接還允許您安裝依賴的包和程序集引用,這兩者都是由標準的NuGet VSIX包安裝程序禁用。

我猜標準NuGet不允許出於安全原因安裝依賴項,但在我們的例子中,我們使用我們自己的VSIX,我們的模板和我們的NuGet包,還有一些額外的已知依賴項,所以許可證檢查在模板實際使用之前已經很久了。