166

複数のプロジェクトを使用したソリューションがあります。1 つのソリューション全体のアセンブリ情報ファイルをリンクして、AssemblyInfo.cs ファイルを最適化しようとしています。これを行うためのベストプラクティスは何ですか? ソリューション全体のファイルに含める必要がある属性と、プロジェクト/アセンブリ固有の属性はどれですか?


編集: 興味がある場合は、AssemblyVersion、AssemblyFileVersion、AssemblyInformationalVersion の違いは何ですか?というフォローアップの質問があります。

4

8 に答える 8

212

GlobalAssemblyInfo.cs というグローバル ファイルと AssemblyInfo.cs というローカル ファイルを使用しています。グローバル ファイルには、次の属性が含まれています。

 [assembly: AssemblyProduct("Your Product Name")]

 [assembly: AssemblyCompany("Your Company")]
 [assembly: AssemblyCopyright("Copyright © 2008 ...")]
 [assembly: AssemblyTrademark("Your Trademark - if applicable")]

 #if DEBUG
 [assembly: AssemblyConfiguration("Debug")]
 #else
 [assembly: AssemblyConfiguration("Release")]
 #endif

 [assembly: AssemblyVersion("This is set by build process")]
 [assembly: AssemblyFileVersion("This is set by build process")]

ローカル AssemblyInfo.cs には、次の属性が含まれています。

 [assembly: AssemblyTitle("Your assembly title")]
 [assembly: AssemblyDescription("Your assembly description")]
 [assembly: AssemblyCulture("The culture - if not neutral")]

 [assembly: ComVisible(true/false)]

 // unique id per assembly
 [assembly: Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]

次の手順を使用して、GlobalAssemblyInfo.cs を追加できます。

  • プロジェクトのコンテキスト メニューでAdd/Existing Item...を選択します。
  • GlobalAssemblyInfo.cs を選択します
  • 右側の小さな下向き矢印をクリックして、追加ボタンを展開します
  • ボタンのドロップダウンリストで「リンクとして追加」を選択します
于 2008-09-15T13:04:38.270 に答える
21

私の場合、独自のプロジェクトにさまざまなコンポーネントを含む、Visual Studio ソリューションがある製品を構築しています。共通の属性は行きます。ソリューションには、約 35 のプロジェクトと、次の属性を持つ共通のアセンブリ情報 (CommonAssemblyInfo.cs) があります。

[assembly: AssemblyCompany("Company")]
[assembly: AssemblyProduct("Product Name")]
[assembly: AssemblyCopyright("Copyright © 2007 Company")]
[assembly: AssemblyTrademark("Company")]

//This shows up as Product Version in Windows Explorer
//We make this the same for all files in a particular product version. And increment it globally for all projects.
//We then use this as the Product Version in installers as well (for example built using Wix).
[assembly: AssemblyInformationalVersion("0.9.2.0")]

AssemblyTitle、AssemblyVersion などの他の属性は、アセンブリごとに提供されます。アセンブリをビルドすると、AssemblyInfo.cs と CommonAssemblyInfo.cs の両方が各アセンブリにビルドされます。これにより、すべてのプロジェクトにいくつかの共通の属性を持ち、他のいくつかに特定の値を持たせたい場合に、両方の長所が得られます。

それが役立つことを願っています。

于 2008-09-15T13:14:27.077 に答える
16

@JRoppert によって提示されたソリューションは、私が行っていることとほぼ同じです。唯一の違いは、アセンブリごとに異なる可能性があるため、ローカルの AssemblyInfo.cs ファイルに次の行を追加したことです。

#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
[assembly: AssemblyVersion("This is set by build process")]
[assembly: AssemblyFileVersion("This is set by build process")]
[assembly: CLSCompliant(true)]

また、(一般的に) ソリューションごとに 1 つの共通アセンブリ情報を使用します。1 つのソリューションは単一の製品ライン/リリース可能な製品であると想定しています。共通アセンブリ情報ファイルには次のものもあります。

[assembly: AssemblyInformationalVersion("0.9.2.0")]

これにより、Windows エクスプローラーによって表示される「ProductVersion」の値が設定されます。

于 2008-09-15T14:01:20.477 に答える
8

MSBuild Community Tasksには、AssemblyInfo.csの生成に使用できるAssemblyInfoというカスタムタスクが含まれています。使用するにはcsprojファイルを少し手作業で編集する必要がありますが、価値があります。

于 2008-09-15T13:45:44.040 に答える
3

複数のプロジェクト間でファイルを共有するには、既存のファイルをリンクとして追加できます。

これを行うには、既存のファイルを追加し、ファイル セレクターで [リンクとして追加] をクリックします。(出典: free.fr )リンクとして追加

共有ファイルに何を入れるかについては、アセンブリ間で共有されるものを入れることをお勧めします。著作権、会社、おそらくバージョンのようなもの。

于 2008-09-15T13:10:38.677 に答える
0

複数のプロジェクトに 1 つの AseemblyInfo.cs ファイルを使用することはお勧めしません。AssemblyInfo ファイルには、その特定のアセンブリにのみ関連する可能性のある情報が含まれています。最も明白な 2 つの情報は、AssemblyTitleAssemblyVersionです。

より良い解決策はtargets、アセンブリ属性を複数のプロジェクトに「注入」するために、MSBuild によって処理されるファイルを使用することです。

于 2008-09-15T13:04:04.577 に答える