Nugetパッケージ。 パッケージを更新する個人的な経験

画像



こんにちは、Habrの住民。 今日は、Nuget Packet Managerを介してパッケージを更新するトピックについて議論し、これを正しく行う方法についてお話します。 偶然出会った状況と、私や同僚に起こったそれらの解決策を検討することを提案します。 これらの問題/あなたが直面しなければならなかった新しい問題に対するあなたの解決策を喜んで聞きます!





一部のパッケージの特定のバージョンへのアップグレード


この例では、パッケージのグループを特定のバージョンに更新する必要がありました。明確にするために、それらを条件付きで呼び出す:UPacket1、UPacket2、UPacket3。バージョン1からバージョン2に更新する必要がありました。 この問題は、それぞれのDependence *に他の多くのパッケージがまだあることが発見されたときに現れました。依存関係の各パッケージには「> = version」という条件があることに注意することが重要です(厳密な条件がある場合、そのような問題はありませんする必要があります)。 Update-Package UPacket1コマンドを記述するだけで、依存関係のリストにあるすべてのパッケージが自動的に利用可能な最大バージョンに更新されますが、必要ありません。 なんで? たとえば、UPacket1はMicrosoft.AspNet.Mvcに依存しているため、結果としてバージョン5に更新されますが、プロジェクト全体はもともとMvc 4向けに設計されていました。 「[current_version]」、例:



<package id="Microsoft.AspNet.Mvc" version="4.0.30506.0" targetFramework="net45" allowedVersions="[4.0.30506.0]" />
      
      





ソリューション自体は簡単で、少し血を流しました(いくつかのパッケージを調整する必要がありましたが、最大ではなく特定のバージョンに更新する必要があったため、手動で行うのではなく、この属性を適用することもできました)その時。

また、この属性のバージョンは、異なる括弧でカンマ/ダッシュとして指定できることに注意してください。 バージョンとこの属性の詳細については、 こちらを参照してください

このプロセスを自動化するのに役立つようなプログラムを作成するというアイデアがありましたが、これまでのところ手が届きませんでした。



パッケージを更新するときのコンテンツファイルの競合


パッケージで提供されるファイルを変更すると、多くの場合状況が発生します。 この場合、このようなパッケージをさらに更新しようとすると、ファイルの競合が発生する可能性があります。 通常、これには何の問題もありません。競合ファイルをスキップして(スキップ* )、パッケージフォルダーでこのファイルを探し、プロジェクト内の必要なファイルを手動で更新します(プロジェクトファイルでの変更、変更、追加/削除の必要性を比較) 。 ファイルの比較と接続(マージ* )のプロセスには、非常に便利なプログラム-Araxisを使用します。 しかし、プロジェクトに約100個のパッケージがあり、それらの多くに12個の競合がある場合(プロジェクトには約10個のトピックがあり、それぞれが多くのファイルを提供します)。 Araxisはフォルダー全体を比較することもできます。このため、すべてのパッケージ(「コンテンツ」サブフォルダー)からすべてのファイルを1か所に収集するプログラムを作成することにしました。 次に、これらのファイルをプロジェクトファイル全体と単に比較します。各パッケージを手動で入力し、その内容をプロジェクトと比較するよりもはるかに高速です。 あなたがそのようなプログラムを書くのが面倒で、そのような人が何人かいるなら、私はそれを説明付きの別のトピックに投稿します。



これまでのところ、これはこのトピックで共有できる興味深いものからすべてです。 何か新しいことが生じたら、新しいパーツを更新または追加します。 また、どのような問題に遭遇しましたか? どうやって決めたの? コメントを書いてください、それは議論することが可能であり、記事で出すのが最も興味深いです。



All Articles