带有公共NuGet包的VS项目模板

带有公共NuGet包的VS项目模板,nuget,vsix,visual-studio-templates,Nuget,Vsix,Visual Studio Templates,NuGet文档描述了在VS模板中定义的包文件的两个可能的存储库:1)在VSIX中,或2)在模板中。对于“已安装”的软件包,还有注册表的第三个选项 我们有自定义的项目模板,这些模板将使用注册表中尚未定义的公开可用的NuGet包。它会使VSIX和/或模板过多,无法包含nupkg文件。是否有一些隐藏的选项或技巧允许存储库指向VisualStudio用户定义的包源 因为我没有找到任何简单的“窍门”,所以我在本次讨论中编写了一个自定义项目向导- 可以通过PackageSourceProvider找到包源,

NuGet文档描述了在VS模板中定义的包文件的两个可能的存储库:1)在VSIX中,或2)在模板中。对于“已安装”的软件包,还有注册表的第三个选项


我们有自定义的项目模板,这些模板将使用注册表中尚未定义的公开可用的NuGet包。它会使VSIX和/或模板过多,无法包含nupkg文件。是否有一些隐藏的选项或技巧允许存储库指向VisualStudio用户定义的包源

因为我没有找到任何简单的“窍门”,所以我在本次讨论中编写了一个自定义项目向导-

可以通过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软件包,还有一些其他已知的依赖项,因此在实际使用模板之前很久就进行了许可证检查