7

バックグラウンド

私は次のコンポーネントを持っています:

  • NuGetパッケージを使用する私のローカルソリューション(.NET 4.5)。
  • ソリューションのPowerShellビルドスクリプト。ビルド、単体テストの実行、Web.config変換などのターゲットがあります。
  • CruiseControl.NETを実行しているインターネット接続のないビルドサーバーで、ビルドスクリプトを呼び出してファイルをビルドします。また、開発ビルドの(IIS7)環境としても機能します。
  • インターネットにアクセスできないIIS7を備えた実動サーバー。

ゴール

ソリューションのNuGetパッケージを利用して、ソースの一部としてローカルに保存したいと思います。ビルドサーバーと本番サーバーでインターネット接続やnugetパッケージサーバーに依存する必要はありません。

質問

  • これらのパッケージを適切に展開するようにMSBuildに指示するにはどうすればよいですか、またはこれはNuGetのデフォルトの動作ですか?
4

4 に答える 4

9

Scott Hanselmanは、NuGet.orgがダウンしている(または飛行機に乗っている)ときにNuGetにアクセスする方法というタイトルの優れた記事を書いています。この記事を読むと、最後に彼の提案は主に一時的なタイプのソリューションであり、緊急の場合を除いてオフラインキャッシュは必要ないと彼は言います。

ただし、彼の記事の下部を読んだ場合、彼は次のように提案しています。

全社規模での外部依存関係が懸念される場合は、依存するNuGetパッケージを含むネットワーク共有(おそらく共有ビルダーサーバー上)が必要になる場合があります。これは、組織として低帯域幅の状況にある場合に便利です。

これは私が同じような状況でやったことです。私たちは、私たちが依存しているさまざまなパッケージの最新バージョンと共有しています(もちろん、あなたが何らかのタイプのネットワークを使用していると仮定しています)。それはうまく機能し、半定期的にパッケージを更新するためにほんの少しの作業が必要です(四半期ごとの更新サイクルがあります)。

あなたにも役立つかもしれない別の記事(私にとっては)は次のとおりです:NuGetを使用して会社の内部DLLを配布する

于 2012-11-26T19:05:24.383 に答える
0

デフォルトでは、Nugetはすべての依存関係をpackages/フォルダーに配置します。このフォルダーをソース管理システムに追加するだけで、ビルドを行うときにNugetがインターネットから何もダウンロードする必要がなくなります。また、NugetPackageRestoreがソリューションで構成されていないことを確認する必要があります。

于 2012-11-26T19:03:02.680 に答える
0

決定を下す必要があります。ビルド時にパッケージをダウンロード/インストールするか(パッケージの復元、独自のスクリプト、またはこれを実行するビルドツールのいずれを使用する場合でも)、/packagesアセンブリを/にあるかのようにソース管理に配置します。 libディレクトリ。

パッケージの復元とNuGetのVisualStudio拡張機能を内部で使用する際に非常に多くの問題が発生したため、会社の2つの製品のうち1つがプライベートNuGetリポジトリであるにもかかわらず、その欠陥のためにNuGetをほぼ完全に廃棄しました。

基本的に、ライフサイクルを管理する方法は、次のような製品BuildMasterProGetの組み合わせを使用することです。

  • ProGetは、すべてのNuGetパッケージ(自分で公開したパッケージとnuget.orgからのパッケージの両方)をキャッシュします
  • BuildMasterは、CIとデプロイメントの両方の側面を実行し、すべてのNuGetパッケージの復元を処理するため、大規模なチェックインライブラリや、パッケージの復元であるソリューションの悪夢に対処する必要はありません。

同様の手順を採用する場合は、インストールされたNuGetパッケージアセンブリを含む最初の環境でビルドアーティファクトを作成し、プロセスを繰り返さずにそのアーティファクトを本番環境にデプロイするのが最も簡単な場合があります。

これがお役に立てば幸いです、
-Tod

于 2012-11-27T16:23:41.430 に答える
0

これは古い議論ですが、プロジェクトの構築に必要なすべてのファイルをサイズの関係で保存するのは、いったいどうして悪いことでしょうか。

ライブラリが利用できない場合は、それを置き換える必要があるという考えはおかしいです。コードにはお金がかかります。gitまたはnugetでライブラリを制御しないため、コピーが利用可能である必要があります。

多くの企業が抱える要件の1つは、監査です。ライブラリがデータを盗むことが判明した場合はどうなりますか。ライブラリがNUGETから削除されており、コードをビルドして再確認することさえできないかどうかをどのようにして確実に知ることができますか。

1つのサイズは、WebのすべてのNugetおよびgitの方法に適合します。

ファイルがローカルに保存され、オプションでソース管理に配置される、Nugetが過去に機能した方法が進むべき道だと思います。

于 2019-02-25T21:03:53.477 に答える