1

TFS でいくつかのライブラリ ソリューションを構築している環境があります。ビルド プロセスの最後に、スクリプトはそれらを NuGet パッケージにパッケージ化し、ローカル フィードにプッシュします。

これで、日々ほとんど変化しないこれらのライブラリをアップストリーム プロジェクトに含めることができます。

これらのライブラリとアップストリーム プロジェクトは通常、同じバージョンで分岐されます。基本的に、トランクは進化する最新バージョンです。分岐する前に、トランクは 3.0.0.123 であるとします。123 は実行中のビルド番号です。ある時点で、現在のトランクをリリースするものとしてマークし、ブランチします。ブランチの時点でのトランクのバージョン番号がそのブランチのバージョンになり、次のリリースになる可能性が高いと思われるバージョン (たとえば 3.1.0.456) まで、トランクに適した方法でバージョンを増やします。 .

これは、NuGet の使用方法に少し奇妙さをもたらします。ブランチ 3.0.0.456 はブランチ (おそらく 3.0.0.457) の最新ライブラリを使用し、トランクはトランク (3.1.0.789) の最新ライブラリを使用します。

つまり、パッケージ内で依存関係を定義するときに NuGet が使用する方法と同様に、NuGet を使用してソリューションのバージョンをセットアップできるということです。

理想的には、分岐したアップストリーム アプリケーションに [3.0.0.456, 3.1) を使用し、トランクに最新 (バージョンなし) を使用するように指示したいと考えています。このシナリオでは、ブランチがピックアップされ、次のブランチ ビルド (3.0.0.457) がピックアップされ、トランクは、フィードに発行された最後の NuGet パッケージが何であれピックアップされます。

可能な解決策として私が思いついた唯一のアイデアは、ビルド テンプレートのパラメーターを使用し、それを使用して、NuGet ターゲットが実行される前に package.config ファイルを更新することです。

これがスーパーユーザーまたは他の場所に行く必要がある場合はお詫びします...

4

1 に答える 1

1

ライブラリプロジェクトのパッケージの自動作成をビルドに実行させるためにいくつかの調査を行った後、これはNuGetの制限であるという(間違った)結論に達しました。XSDドキュメントのソースを解析して、XMLを記述し、nuspecがどのように機能するかを確認しました。

私は彼らのソースを持っている間、バージョンを制限するために彼らのスキーマを受け入れるようにpackage.configファイルを変更する方法を調べ始めました。少し掘り下げた後、package.configのパッケージノードに追加できる属性を見つけました:allowedVersions。これはまさに私が追加しようとしていたものです!

この情報を入手したら、それがどのように実装されているかをもう少し深く掘り下げることができました。この機能はしばらく前から存在しており、ドキュメントサイト(http://docs.nuget.org/docs/reference/versioning )にも文書化されていることがわかりました。

これは、下部にある依存関係のバージョン管理ガイドにあります。私はそれを完全に理解したか、それまで読んだことがないに違いありません!

これは問題ではなく、唯一の問題は私の無知でした。このページに掲載されているGoogle社員の参考資料にすぎません。

ソース(ページの下部にあります):NuGetバージョニング

于 2013-02-05T19:21:22.770 に答える