c# クラスライブラリの静的リンクによる参照

自作のクラスライブラリを参照するには、2つ方法があります。ここでは exe に組み込んで利用する方法を解説します。もう1つの dll として参照する方法については、クラスライブラリの参照方法 をご覧ください。

1. フォルダを作成

まず、クラスライブラリを使用したいプロジェクトにフォルダを作成します。 画面右のソルーションエクスプローラの使用したいプロジェクト上で右クリックすると表示されるメニューから、追加(D) -> 新しいフォルダ を選択すると NewFolder1 という名前のフォルダが作成されるので、フォルダの名前を使用したいライブラリの名前に変更します。フォルダの名前を変更するにはフォルダをクリックします。例えば、クラスライブラリ SSS を参照するには、SSS という名前のフォルダを用意するとよいでしょう。このフォルダ作成は必須ではありませんが、こうするとわかりやすくて良いと思います。

2. クラスライブラリ内の使用するファイルをリンクする

静的にリンクするには、dll として利用する場合と違い、使用するクラスライブラリのファイルを手動で追加する必要があります。追加するには、ソルーションエクスプローラの 1 で作成したフォルダ上で右クリックすると表示されるメニューから 追加(D) -> 既存の項目(G)... を選択すと表示される既存項目の追加ダイアログで、使用したいクラスライブラリのファイルを選択します。その後、追加ボタンを普通に押さずに、右端を押すとドロップダウンされる、リンクとして追加(L) を選択してファイルを追加します。

Visual C# 2008 - 既存項目の追加: リンクとして追加
Visual C# 2008 - 既存項目の追加: リンクとして追加

これで、リンクとして追加したファイルのクラスが使えるようになります。このとき Visual C# のソルーションエクスプローラは以下のようになります。ショートカットを示すアイコンがオーバレイ表示されていることに注意してください。

Visual C# 2008 - メイン画面: リンクとして追加後
Visual C# 2008 - メイン画面: リンクとして追加後

リンクとして追加しなかった場合、ショートカットアイコンが表示されません。この場合、フォルダにクラスライブラリのコピーが作成されてしまっていますので、削除してやり直しましょう。

リソースファイルを静的リンクするには?

クラスライブラリのリソースを静的にリンクするには、まず、対応する resx ファイルを cs ファイルと同じ方法でリンクします。ソルーションエクスプローラで追加した resx ファイルをクリックすると表示されるプロパティ画面で、カスタムツールの覧に、ResXFileCodeGenerator を設定します。さらに、リソースの名前空間をカスタムツールの名前空間の覧に設定します。

例えば、クラスライブラリのプロジェクト SSS のプロパティからリソースを作成すると、.\Properties フォルダに Resources.resx ファイルが作成されます。静的リンクするときにはこのファイルをリンクとして追加します。このときの、名前空間は、SSS.Properties になります。

Visual C# 2008 - メイン画面: リソースをリンクとして追加してプロパティを設定
Visual C# 2008 - メイン画面: リソースをリンクとして追加してプロパティを設定

c# 2008 Express Edition だと、リンクとして追加したリソースファイルの再コンパイルが自動的に行われないようです。このため、resx ファイルを最後にコンパイルしたプロジェクトと現在のプロジェクトが異なる場合、実行時に例外が発生します。しかもリソースを参照するまで例外は発生しないので注意が必要です。

Visual C# 2008 - 例外: リソースをリンクとして追加

発生する例外

System.Resources.MissingManifestResourceException

指定されたカルチャまたはニュートラル カルチャに対して適切なリソースが見つかりませんでした。\"SSS.Properties.Resources.resources\" が適切に埋め込まれたか、実行時にアセンブリ \"HTMLGenerator\" にリンクされたか、または必要なサテライト アセンブリが読み込まれて完全に署名されていることを確認してください。

例外の回避

この現象を回避するには、resx ファイルを右クリックして表示されるメニューから、カスタムツールの実行(L) を選択してコンパイルします。同じリソースを使う他のソルーションを使用するときに、1回は手動コンパイルし直す必要があります。

自分は手動コンパイルの実行を忘れないように、プログラムの起動時にリソースをわざと参照して、手動コンパイルし忘れたバージョンをリリースしないようにしています。

まとめ

このページで紹介した静的リンクは、少々やっかいなので、特別なこだわりがない場合は dll としてリンクした方が楽です (クラスライブラリの参照方法 参照)。配布するファイルを exe 1つにしたい場合や、少しでも配布するファイルサイズを減らしたいなどのこだわりがある場合にはこの方法が使えると思います。

となりのページ

このサイトについて

このサイトのページへのリンクは自由に行っていただいてかまいません。
このサイトで公開している全ての画像、プログラム、文書の無断転載を禁止します。

連絡先

ここをクリック すると表示されるページから作者へメールで連絡できます。

共有