- PR -

.exeに.netmoduleを埋め込む方法

1
投稿者投稿内容
YearHorn
会議室デビュー日: 2004/01/15
投稿数: 11
投稿日時: 2004-03-14 21:31
モジュールが1つ
  a.netmodule
と、これを参照するコード
  b.cs
があって、実行ファイルを作るのですが、
  csc /addmodule:a.netmodule b.cs
とやって出来た
  b.exe
を別フォルダに移動して実行すると
  依存関係の1つが見つかりませんでした
と言われてしまいます。

実行ファイルが単体で実行できるように
モジュールを実行ファイルに埋め込んで1つにしたいのです。
ドキュメントには普通にやればシングルファイル アセンブリ
になると書かれているのですが、マルチファイル アセンブリに
なってる?
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-03-14 22:09
引用:

YearHornさんの書き込み (2004-03-14 21:31) より:
実行ファイルが単体で実行できるように
モジュールを実行ファイルに埋め込んで1つにしたいのです。
ドキュメントには普通にやればシングルファイル アセンブリ
になると書かれているのですが、マルチファイル アセンブリに
なってる?


addmoduleはメタデータをインポートするためのもの、つまりコンパイルのための型参照情報を指定するためのもので、アセンブリ自体にモジュールを埋め込む物ではありません。

--MSDNより引用
/addmodule を使用して追加されたすべてのモジュールは、実行時に出力ファイルと同じディレクトリに配置されている必要があります。つまり、コンパイル時には任意のディレクトリのモジュールを指定できますが、実行時に指定するモジュールはアプリケーション ディレクトリ内に配置する必要があります。実行時にモジュールがアプリケーション ディレクトリ内に存在しない場合は、System.TypeLoadException になります。
--MSDNより引用終わり

どこの記述かは見つけられなかったんですが、シングルファイルアセンブリと言うのは、コンパイルされるアセンブリそのものはシングルファイルアセンブリになると言う意味でしょう。
当然そこから参照されるアセンブリは別に必要になります(参照されているアセンブリの方はマルチファイルですね)。

--追記
って書いたんですけど、いや、なんか違うような…マルチファイルアセンブリを作る場合の指定に見えますね。
「ドキュメントには普通にやればシングルファイル アセンブリになると書かれている」これってどこに書いてあったんでしょう?

[ メッセージ編集済み 編集者: なちゃ 編集日時 2004-03-14 22:15 ]
YearHorn
会議室デビュー日: 2004/01/15
投稿数: 11
投稿日時: 2004-03-15 20:37
返答ありがとうございます。

どこだったかは覚えていないのですが、
SDK付属のドキュメントにVisual Studioでない
C#コンパイラからはシングルファイル アセンブリしか
作れないと書いてありました。でも なちゃさんの
書かれていることで正しいと思います。
1

スキルアップ/キャリアアップ(JOB@IT)