VSでの共有プロジェクトの活用方法について

Visual Studioにおいて、複数プロジェクトで共通の設定やコード、ファイル等がある場合、プロジェクト毎に同じものを作成するのは非効率なので、共有プロジェクトを作成しそこで一元管理することをお勧めします。

作り方は簡単!

まずは、以下のような3つのプロジェクトがあったとします。

EgumaruHogeAppとEgumaruSampleで共通の処理をEgumaruCommonLibで実装するという良くあるモジュールの分割の仕方ですが、AssemblyInfo.csに何度も会社名や製品名、バージョンなどを記述するのは数がこの程度であればいいのですが、増えてくると面倒です。

そこで、共有プロジェクトの出番です!

1.新しいプロジェクトを追加

ソリューションに新しいプロジェクトを[共有プロジェクト]を追加します。

とりあえず、名前はCommonResourcesにしました。

2.作成した共有プロジェクトを参照に追加する。

各プロジェクトの参照に1で作成したCommonResourcesを追加していきます。

3.共通アセンブリ情報ファイルを作成

Propertiesフォルダを作成し、共通のアセンブリ情報ファイルを作成します。

個別設定する不要な部分をコメントアウトします。

using System.Reflection;

// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。
// アセンブリに関連付けられている情報を変更するには、
// これらの属性値を変更してください。
//[assembly: AssemblyTitle("CommonResources.Properties")]
//[assembly: AssemblyDescription("")]
//[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("egumaru.info")]
[assembly: AssemblyProduct("Egumaru Samples")]
[assembly: AssemblyCopyright("Copyright © egumaru.Info 2019")]
//[assembly: AssemblyTrademark("")]
//[assembly: AssemblyCulture("")]

// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから 
// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 
// その型の ComVisible 属性を true に設定してください。
//[assembly: ComVisible(false)]

// このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります
//[assembly: Guid("c8b35f8f-e81b-45d4-b812-2d5aa171b566")]

// アセンブリのバージョン情報は次の 4 つの値で構成されています:
//
//      メジャー バージョン
//      マイナー バージョン
//      ビルド番号
//      リビジョン
//
//[assembly: AssemblyVersion("1.0.0.0")]
//[assembly: AssemblyFileVersion("1.0.0.0")]

4.各AssemblyInfo.csから共有設定項目を削除する。

わかりやすいようにここではコメントアウトにしています。

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。
// 制御されます。アセンブリに関連付けられている情報を変更するには、
// これらの属性値を変更してください。
[assembly: AssemblyTitle("EgumaruCommonLib")]
[assembly: AssemblyDescription("Egumaru Common Lib")]
[assembly: AssemblyConfiguration("")]
//[assembly: AssemblyCompany("")]
//[assembly: AssemblyProduct("EgumaruCommonLib")]
//[assembly: AssemblyCopyright("Copyright ©  2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントから
// 参照できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、
// その型の ComVisible 属性を true に設定してください。
[assembly: ComVisible(false)]

// このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります
[assembly: Guid("8382bf4b-ee0d-49fa-a655-cc8b500ceb07")]

// アセンブリのバージョン情報は、以下の 4 つの値で構成されています:
//
//      メジャー バージョン
//      マイナー バージョン
//      ビルド番号
//      リビジョン
//
// すべての値を指定するか、次を使用してビルド番号とリビジョン番号を既定に設定できます
// 既定値にすることができます:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

5.その他、共有する設定ファイル等を追加する。

AssemblyInfoの他、共通の設定ファイルや画像などのリソースなどにも応用できます。

CommonResourcesプロジェクトに追加するだけでOKですが、ファイルの場合は出力フォルダにコピーする設定を忘れずにしましょう。

備忘録カテゴリの最新記事