DLL に関する優れたリソースと、Visual Studio での DLL の使用/生成方法を知っている人はいますか? 私が特に漠然としているいくつかの質問は次のとおりです。
- ファイルの更新の仕組み
- dll バージョン番号の生成方法
- プロジェクトによる参照の追加と特定の dll の参照の違い
その他のヒントも大歓迎です。
DLL に関する優れたリソースと、Visual Studio での DLL の使用/生成方法を知っている人はいますか? 私が特に漠然としているいくつかの質問は次のとおりです。
その他のヒントも大歓迎です。
.NET DLL
.NET DLL の一般的な用語はアセンブリです。それらは展開の単一のアトミック ユニットであり、1 つ以上の CLR 'モジュール' で構成されます (たとえば、2 つ以上の言語からのコンパイラ出力を組み合わせない限り、ほとんどの開発者にとって通常は 1 つだけです)。アセンブリには、アセンブリ マニフェストなどの CIL コードと CLR メタデータの両方が含まれます。
.refresh ファイル
.refresh ファイルは、参照された dll の新しいビルドをチェックする場所を VS に伝える単なるテキスト ファイルです。これらは、この情報を保存するプロジェクト ファイルがないファイル ベースの Web プロジェクトで使用されます。
バージョン番号
.NET アセンブリのバージョン番号は、アセンブリ スコープの属性 AssemblyVersion によって生成されます。これは通常、'AssemblyInfo.cs' という名前のソース ファイルにあります (VS2005 以降では、'Properties' という名前のプロジェクト フォルダにあります)。バージョン番号は、major.minor.build.revision で構成されます。たとえば、-
[アセンブリ: AssemblyVersion("1.0.0.0")]
AssemblyVersion は、アセンブリの ID の一部として (厳密な名前で) 使用され、バインディング プロセスおよびバージョン ポリシーの決定時に重要な役割を果たします。
たとえば、GAC に同じ名前のアセンブリが 2 つある場合、AssemblyVersion 属性はアセンブリの特定のバージョンを読み込む目的でそれらを区別します。
AssemblyVersion 番号を手動で修正してインクリメントするか、次のように指定して、コンパイラにビルド番号とリビジョン番号を生成させることができます。
[assembly: AssemblyVersion("1.0. *
")] - ビルド番号とリビジョン番号を生成します
[assembly: AssemblyVersion("1.0.0. *
")] - リビジョン番号を生成します
AssemblyVersion 属性が存在しない場合、バージョン番号はデフォルトで '0.0.0.0' になります。
AssemblyVersion 属性の値はアセンブリのマニフェストの一部になりますが、AssemblyFileVersion 属性の値は含まれません。
AssemblyFileVersion 属性は、Win32 ファイル バージョンを DLL に埋め込むために使用されます。これが存在しない場合は、AssemblyVersion が使用されます。.NET アセンブリ ローダー/リゾルバーが読み込むアセンブリのバージョンを選択する方法には関係ありません。
プロジェクト参照と DLL の参照
プロジェクト参照を追加する場合は、参照されたプロジェクトがソリューションの一部になることを意味します。これにより、参照されているプロジェクトのコードに直接ステップインできるため、デバッグが簡単になります。dll 参照のみを追加する場合、プロジェクトがソリューションの一部であり、ソリューション内のコードにステップインできるという利点はありません。
背景については、 DLL 情報に関する質問を参照してください。
アンマネージド DLL のバージョン番号は、exe の場合と同様に、DLL の rc ファイルに格納されます。マネージ DLL の場合、AssemblyFileInfo 属性を使用していると思います。通常、Visual Studio で生成されたプロジェクトの AssemblyInfo.cs にあります。
[assembly: AssemblyFileVersion("1.0.0.0")]
プロジェクトごとに参照を追加すると、VS は参照されたアセンブリの正しいフレーバー (デバッグ/リリース) を出力ディレクトリにコピーできます。また、この情報を使用してプロジェクト間の依存関係を暗黙的に追加し、正しい順序でビルドすることもできます。