NuGet 文档为在 VS 模板中定义的包文件描述了两个可能的存储库:1)在 VSIX 中,或 2)在模板中。“已安装”包的注册表还有第三个选项。
我们有自定义项目模板,这些模板将使用尚未在注册表中定义的公开可用的 NuGet 包。它会使 VSIX 和/或模板过于膨胀,以至于无法包含 nupkg 文件。是否有一些隐藏的选项或技巧可以让存储库改为指向 Visual Studio 用户定义的包源?
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 包,以及一些额外的已知依赖项,所以许可证检查早在实际使用模板之前就已经制作好了。