NuGet文档描述了VS模板中定义的包文件的两种可能的存储库:1)在VSIX中,或2)在模板中。对于"已安装"的程序包,还有注册表的第三个选项。
我们有自定义项目模板,将使用尚未在注册表中定义的公开可用NuGet包。它将过于膨胀VSIX和/或模板,无法包含nupkg文件。是否有一些隐藏的选项或技巧允许存储库转而指向Visual Studio用户定义的包源?
由于我没有找到任何简单的"技巧",我根据这次讨论编写了一个自定义项目向导-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包,还有一些其他已知的依赖项,所以许可证检查早在模板实际使用之前就已经进行了。