NuGet文档描述了VS模板中定义的包文件的两个可能的存储库:1)在VSIX内,或2)在模板中。还有“已安装”软件包注册表的第三个选项。
我们有自定义项目模板,它们将使用尚未在注册表中定义的公开可用的NuGet包。它会使VSIX和/或模板膨胀太多而无法包含nupkg文件。是否有一些隐藏的选项或技巧允许存储库转而指向Visual Studio用户定义的包源?
答案 0 :(得分: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包,还有一些额外的已知依赖项,所以在实际使用模板之前很久就进行了许可检查。