3

NuGet ドキュメントでは、VS テンプレート内で定義されたパッケージ ファイルの 2 つの可能なリポジトリについて説明しています: 1) VSIX 内、または 2) テンプレート内。「インストール済み」パッケージ用のレジストリの 3 番目のオプションもあります。

レジストリでまだ定義されていない公開されている NuGet パッケージを使用するカスタム プロジェクト テンプレートがあります。VSIX やテンプレートが肥大化して、nupkg ファイルも含められなくなります。リポジトリが代わりに Visual Studio ユーザーによって定義されたパッケージ ソースを指すようにするための隠しオプションまたはトリックはありますか?

4

1 に答える 1

2

簡単な「トリック」が見つからなかったので、このディスカッション ( http://nuget.codeplex.com/discussions/385955 ) に従ってカスタム プロジェクト ウィザードを作成しました。

パッケージ ソースは、PackageSourceProvider を介して見つけることができます。これは、PackageInstaller と共に MEF を介してインポートできます。次に、パッケージ ソースからリポジトリを作成し、それをインストーラーに渡します。

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 パッケージを使用しており、いくつかの既知の依存関係が追加されているため、ライセンス チェックテンプレートが実際に使用されるずっと前に作成されています。

于 2012-09-12T16:43:51.790 に答える