web-dev-qa-db-ja.com

ソリューション全体で統一されたバージョン管理のための共有AssemblyInfo

この手法について読んだことがあります: VSプロジェクトでのアセンブリ情報の共有-JJamesonのブログ

基本的に、アセンブリに関するバージョン情報を使用してSharedAssemblyInfo.csを作成し、このファイルをソリューションのすべてのプロジェクトへのリンクとして追加することを意味します。したがって、実際のファイルはディスク上の1つの場所にのみ存在します。

私の質問は2つのシナリオを扱っています。

  1. このメカニズムを使用しない既存のソリューション:ShareAssemblyInfoをすべてのプロジェクトに簡単に追加する方法はありますか? (私は50のプロジェクトでソリューションを持っていると言います)。

  2. 新しいプロジェクトを作成すると、デフォルトで新しいAssemblyInfo.csが作成されます。ただし、SharedAssemblyInfoにも自動的にリンクしたいと思います。

これに対する解決策はありますか?一般的な慣行は何ですか?

66
lysergic-acid

最初のポイントは、複数のファイルを一度に処理して検索/置換できるシンプルなテキストエディターで解決できます。すべてのcsprojを開いて、文字列<Compile Include="Properties\AssemblyInfo.cs" />を置き換えます

<Compile Include="..\SharedAssemblyInfo.cs">
  <Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>

または、次のようなユーティリティを作成することもできます。

var files = Directory.GetFiles(yourSolutionDir, "*.csproj", SearchOption.AllDirectories);
foreach (var f in files) {
  string contents = File.ReadAllText(f);
  string result = contents.Replace("<Compile Include=\"Properties\\AssemblyInfo.cs\" />", putSecondStringHere_ItIsJustTooLong); // :)
  File.WriteAllText(f, contents);
}

2番目の質問については... Visual Studioカスタムプロジェクトテンプレート を見ることができますが、努力する価値があるかどうかはわかりません。代わりにこれをチェックするIMO書き込みテストを行う必要があります。それははるかに単純であり、結果は実際にはほぼ同じです。

UPD:いくつかのカスタムルールに対してソリューション/プロジェクトファイルをチェックするためのテストの記述について。基本的に、sln/csproj形式は、それほど労力をかけずに解析できるほど単純です。したがって、SharedAssemblyInfo.csをすべてのプロジェクトにリンクする場合は、csprojを解析して確認するだけです。次に、そのチェッカーをビルドサーバーに配置し、各ビルドで実行します。このようなシステムは現在動作しており、作成に約2日かかりますが、さらに多くの節約ができました(より洗練されたルールとマルチソリューションプロジェクトがあるため、努力する価値がありました)。

このチェックについては、今ここでは詳しく説明しませんが(それほど短いわけではありません)、すぐにブログ投稿を書くつもりです-おそらく今週の終わりまでです。もし興味があるなら、 私のブログ すぐに確認してください:)

UPD:ここ です。

50
Ivan Danilov

VS 2010で共有アセンブリ情報ファイルにリンクすることができます。AshishJainには、それに関する良いブログ投稿があります。 ソリューション内のプロジェクト間でのアセンブリバージョンの共有

ソリューションレベルで共有アセンブリ情報ファイルを作成した後、プロジェクトからリンクするための彼の指示は次のとおりです。

  1. 共有アセンブリファイルを追加するプロジェクトを右クリックし、[追加]-> [既存のアイテム...]を選択します。

  2. ソリューションフォルダーからファイル「SharedAssemblyInfo.cs」を選択します。

  3. [追加]の代わりに、[追加]の横の矢印をクリックして[リンクとして追加]をクリックします

  4. 同じフォルダー内のAssemblyInfo.csと一緒に、追加されたリンクファイルを下にドラッグします。

  5. 共有アセンブリファイルを追加するすべてのプロジェクトについて、手順1〜4を繰り返します。

私はこれを試しましたが、動作します。

59
Simon Tewsi

ファイルバージョンを自動的にインクリメントするアプリケーションを作成しました。

  1. ダウンロード アプリケーション
  2. ビルド前のイベントコマンドラインに次の行を追加します

C:\ temp\IncrementFileVersion.exe $(SolutionDir)\ Properties\AssemblyInfo.csプロジェクトをビルドするシンプルにするために、エラーが発生した場合のみアプリはメッセージをスローします。正常に動作したことを確認するには、ファイルバージョンを「アセンブリ情報」

注:Visual Studioでソリューションをリロードして[アセンブリ情報]ボタンをフィールドに入力する必要がありますが、出力ファイルには更新されたバージョンが含まれます。

提案やリクエストについては、telson_alva @ yahoo.comまでメールでお問い合わせください

0
Telson Alva

これは、C#プロジェクトとF#プロジェクトの両方があるソリューションでは機能しません。 c#プロジェクトは共有f#ファイルを参照できません。

この場合の唯一のオプションは、別のプロジェクトを作成し、他のプロジェクトから参照することです

0