C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: C#でビルドしたファイル名について


(過去ログ 11 を表示中)

[トピック内 19 記事 (1 - 19 表示)]  << 0 >>

■2303 / inTopicNo.1)  C#でビルドしたファイル名について
  
□投稿者/ 内田 (5回)-(2007/03/30(Fri) 18:54:34)

分類:[C# (Windows)] 

こんにちは。
VS2005でC#アプリを開発しています。

今回、メインアプリの他に、そのメインアプリから使われる
プラグインみたいな小さいライブラリを開発しています。

形式はクラスライブラリです。

これをそのままコンパイルすると、***.dllというファイル名
でコンパイルされます。
これを、私が作っているアプリのプラグインだと言うことを
明示的に示すため、拡張子を.dllではなく、.masとしたいと
考えています。

/out コンパイルオプションを使うのかな?と考えていますが、
VS2005上ではどのように指定すれば良いのでしょうか?

プロジェクトのプロパティページにある、「アセンブリ名」を
変更すれば良いかと考え、XXX.masと書いてコンパイルしたところ、
XXX.mas.dllとなってしまいます。

拡張子を変更することは可能ですか?無理ですか?
また、.dll以外の拡張子にして問題になることはありますか?

よろしくご教示ください。

内田
引用返信 編集キー/
■2304 / inTopicNo.2)  Re[1]: C#でビルドしたファイル名について
□投稿者/ 囚人 (76回)-(2007/03/30(Fri) 20:40:40)
厳密名でアセンブリのアイデンティティを識別しますので、本来は拡張子など関係ありません。単にコンパイルされたファイル名を変更すればよいのですが、おそらく拡張子は決め打ちで探索しています。
どうしてもやりたければ、CLR をホストすれば良いと思います。
引用返信 編集キー/
■2310 / inTopicNo.3)  Re[1]: C#でビルドしたファイル名について
□投稿者/ はつね (117回)-(2007/03/31(Sat) 07:16:31)
はつね さんの Web サイト
No2303 (内田 さん) に返信
> これをそのままコンパイルすると、***.dllというファイル名
> でコンパイルされます。
> これを、私が作っているアプリのプラグインだと言うことを
> 明示的に示すため、拡張子を.dllではなく、.masとしたいと
> 考えています。

クラスライブラリとしてプラグインのようななものを作るのならば、メインプログラムが、watsi.exe だとしたら、watasi.plugin.***.dll という名前にするのがよろしいかと。

自由な名前にしたいのならば、.NET Frameworkのクラスライブラリとしてやるのではなく、プラグインのローディングや何かも自前で用意してやるのではないでしょうか。


引用返信 編集キー/
■2321 / inTopicNo.4)  Re[2]: C#でビルドしたファイル名について
□投稿者/ 内田 (6回)-(2007/04/01(Sun) 18:35:21)
内田です。

ご回答、およびご指導いただき、ありがとうございます。

もう一度質問の趣旨を書かせていただきます。

私の質問は、VS2005を使ってアッセンブリにコンパイルする際に、
***.exeや***.dllではなく、拡張子まで含めた名前を変更できない
かと言うことです。

あまり一般的ではないのですかね・・・。
やはり.dllはdllで使うべきでしょうか?
引用返信 編集キー/
■2322 / inTopicNo.5)  Re[3]: C#でビルドしたファイル名について
□投稿者/ 中博俊 (1004回)-(2007/04/01(Sun) 20:09:51)
中博俊 さんの Web サイト
> あまり一般的ではないのですかね・・・。
> やはり.dllはdllで使うべきでしょうか?

はい。
拡張子によってユーザは判断しますので、変更するのは非常に好ましくないです。
引用返信 編集キー/
■2323 / inTopicNo.6)  Re[3]: C#でビルドしたファイル名について
□投稿者/ はつね (119回)-(2007/04/01(Sun) 21:13:55)
はつね さんの Web サイト
No2321 (内田 さん) に返信
> やはり.dllはdllで使うべきでしょうか?

そのとおりです。

引用返信 編集キー/
■2345 / inTopicNo.7)  Re[4]: C#でビルドしたファイル名について
□投稿者/ 内田 (7回)-(2007/04/03(Tue) 15:45:42)
コンパイルした後、自分で名前を変更するようにしました。
皆さん、ありがとうございました。

解決済み
引用返信 編集キー/
■2346 / inTopicNo.8)  Re[5]: C#でビルドしたファイル名について
□投稿者/ 囚人 (77回)-(2007/04/03(Tue) 15:59:16)
No2345 (内田 さん) に返信
> コンパイルした後、自分で名前を変更するようにしました。
> 皆さん、ありがとうございました。
>

あれ?それでロードできるのでしょうか?
私の返信は、拡張子を変更するとロードできませんよ、という事だったのですが。
引用返信 編集キー/
■2347 / inTopicNo.9)  Re[6]: C#でビルドしたファイル名について
□投稿者/ ぽぴ王子 (168回)-(2007/04/03(Tue) 16:41:53)
ぽぴ王子 さんの Web サイト
えーと、流れに逆らって泳いでしまう感じでちょっとアレではありますが…

.NET とは直接関係ないですが、SUSIE というグラフィックビューアは、プラグインとし
て拡張子 *.spi を使っています。これの中身は DLL です。
で、中さんやはつねさんの「べき論」はともかく、とにかく自分だけで使うから!DLL
として見せたくないだけだから!というのであれば、拡張子を変更するのはアリなん
じゃないのかなぁと思ったりするわけです。

「拡張子によってユーザは判断する」というのであれば、*.mas だったら普通の DLL
じゃなくて内田さんが作ったプログラムのプラグインなんだね!と判断できると思うの
ですよ。

もう一つ。
ちょっとテストで test.dll というマネージドな DLL を作成して、それをリフレクションで
呼び出すプログラムを作りました。
普通に呼び出す分には正しく動いているみたいです。
これをエクスプローラから test.popi という名前にして、そのファイル(中身は DLL )を
リフレクションで呼び出すようにしてみました。もちろん厳密名に変更はありません。
動かしてみたところ、test.popi も test.dll と同じように正常動作しているように見え
ますが、これって囚人さんの話とは違う話なんでしょうか。
囚人さんはロードできないと強調していますが、プラグインということでプロジェクトか
ら参照するのではなくてリフレクションかなぁと少し興味本位でテストしてみたわけで
すけども、もしかしたら僕の検証の仕方が全然違うことをしているのかしら?と不安
になったわけで。

今までリフレクションっていうのがあるんだーふーんぐらいにしかとらえていなかった
ので、今回ちょっと気になって検証してみたわけですが、どうか迷える子羊に真実を
教えてくださいませ。
よろしくお願いします。
引用返信 編集キー/
■2348 / inTopicNo.10)  Re[7]: C#でビルドしたファイル名について
□投稿者/ よねKEN (28回)-(2007/04/03(Tue) 17:06:02)
よねKEN さんの Web サイト
> ちょっとテストで test.dll というマネージドな DLL を作成して、それをリフレクションで
> 呼び出すプログラムを作りました。
> 普通に呼び出す分には正しく動いているみたいです。

どのクラスの何メソッドを使ってますか?

アセンブリのロードにAssembly.LoadFileメソッドを使う場合はファイル名は何でもよいと思います。
Assembly.Loadメソッドを使う場合は拡張子はexeかdllでないとアセンブリは見つかりませんね。

引用返信 編集キー/
■2349 / inTopicNo.11)  Re[8]: C#でビルドしたファイル名について
□投稿者/ ぽぴ王子 (169回)-(2007/04/03(Tue) 17:18:57)
ぽぴ王子 さんの Web サイト
No2348 (よねKEN さん) に返信

> どのクラスの何メソッドを使ってますか?

えーと、Assembly.LoadFrom メソッドを使いました。

> Assembly.Loadメソッドを使う場合は拡張子はexeかdllでないとアセンブリは見つかりませんね。

なるほど。囚人さんが書いておられたのはこのことなのかな。

今回はどぼん!さんのこのあたりの Tips を参考にしました。
http://dobon.net/vb/dotnet/programing/assemblygettypes.html
http://dobon.net/vb/dotnet/programing/createinstancefromstring.html
引用返信 編集キー/
■2350 / inTopicNo.12)  Re[9]: C#でビルドしたファイル名について
□投稿者/ 内田 (8回)-(2007/04/03(Tue) 17:37:44)
ぽぴ王子 様

私の初めの質問のしかたが悪かったのかと反省していましたが、
深く読み込んでいただき、感謝いたします。
まさしく、ポピ王子様が言われているとおりの事を考えていました。

はじめにプラグインと書いたため、私が勝手に色々と省略してしまった
ことが、問題だったように思います。
(例えば、VSから参照設定はしないとか・・・。)

何となくすっきりしました。

後は、VS上から拡張子も含めてアッセンブリの名称を変更できれば
ベターなおですが、これはできないのかな??と思いますので、
自分でファイル名を変更することにしました。

ホントにありがとうございます。
解決済み
引用返信 編集キー/
■2351 / inTopicNo.13)  Re[10]: C#でビルドしたファイル名について
□投稿者/ ぽぴ王子 (170回)-(2007/04/03(Tue) 17:55:32)
ぽぴ王子 さんの Web サイト
No2350 (内田 さん) に返信

> 私の初めの質問のしかたが悪かったのかと反省していましたが、
> 深く読み込んでいただき、感謝いたします。
> まさしく、ポピ王子様が言われているとおりの事を考えていました。

こちらこそ割り込んでしまってすいません。
静観するつもりだったですが、なんとなく気になったのでちょっと実験
してみたらなんか普通に呼べるのかも…と思ったので、その辺を逆に
囚人さんに確認してみようかと思いまして。
(よく考えたら別スレを立てるべきだったかもしれないですね)

# 僕自身ももう少しリフレクションについて勉強すべきかも…
解決済み
引用返信 編集キー/
■2353 / inTopicNo.14)  Re[11]: C#でビルドしたファイル名について
□投稿者/ なちゃ (29回)-(2007/04/03(Tue) 22:12:14)
Loadで読み込む場合はコードベースを明示的に指定してやらないとだめだと思います。
※AssemblyResolveイベントを使ってプラグイン(と思われる場合)のみ特別扱いするなど、
 まあ方法は考えられますが。

単純なプラグインという目的であって、他のアセンブリから依存されたりということがない想定なら、
LoadFromコンテキストで読み込んでもまあ問題はないでしょう。

引用返信 編集キー/
■2356 / inTopicNo.15)  Re[12]: C#でビルドしたファイル名について
□投稿者/ 中博俊 (1005回)-(2007/04/03(Tue) 23:27:51)
中博俊 さんの Web サイト
LordFromやLordFileならファイル名で行けます。
Loadならexeやdllを探しに行くのはおそらくCLRの仕様
引用返信 編集キー/
■2358 / inTopicNo.16)  Re[10]: C#でビルドしたファイル名について
□投稿者/ 渋木宏明(ひどり) (160回)-(2007/04/04(Wed) 02:45:20)
渋木宏明(ひどり) さんの Web サイト
> 後は、VS上から拡張子も含めてアッセンブリの名称を変更できれば
> ベターなおですが、これはできないのかな??と思いますので、
> 自分でファイル名を変更することにしました。

「ビルド後のイベント」でリネームすればよろしいのでは?

# 実際には、ビルド結果のファイルが無くなるとまたビルドが走ってしまうので、別名でコピーする方が良いでしょう。
引用返信 編集キー/
■2359 / inTopicNo.17)  Re[7]: C#でビルドしたファイル名について
□投稿者/ はつね (121回)-(2007/04/04(Wed) 07:34:18)
はつね さんの Web サイト
2007/04/04(Wed) 07:35:09 編集(投稿者)

No2347 (ぽぴ王子 さん) に返信
> .NET とは直接関係ないですが、SUSIE というグラフィックビューアは、プラグインとし
> て拡張子 *.spi を使っています。これの中身は DLL です。
> で、中さんやはつねさんの「べき論」はともかく、とにかく自分だけで使うから!DLL
> として見せたくないだけだから!というのであれば、拡張子を変更するのはアリなん
> じゃないのかなぁと思ったりするわけです。

きちんとは書きませんでしたが、一概になんでもかんでもというよりは、.NET Framework上で動かないのであれば良いとは思うのですが、動いているのであれば、それに従った拡張子をちゃんとつけた方が良いのではないかと思ったわけです。
確かに自分だけが使うプラグインなのであれば、好きにしても良いのかもしれませんね。

# 小さいライブラリはプラグインという事は、明記はありませんが大きなライブラリはDLLのまま
# なのかなーというのが気になりますが(笑)

解決済み
引用返信 編集キー/
■2364 / inTopicNo.18)  Re[8]: C#でビルドしたファイル名について
□投稿者/ 囚人 (78回)-(2007/04/04(Wed) 19:48:50)
なるほど。
プラグインと仰っていたのでよく考えたらリフレクションでロードですね。
静的ロードだと無理じゃないかなぁという事でした。
引用返信 編集キー/
■2365 / inTopicNo.19)  Re[9]: C#でビルドしたファイル名について
□投稿者/ ぽぴ王子 (171回)-(2007/04/04(Wed) 20:08:18)
ぽぴ王子 さんの Web サイト
No2364 (囚人 さん) に返信
> なるほど。
> プラグインと仰っていたのでよく考えたらリフレクションでロードですね。
> 静的ロードだと無理じゃないかなぁという事でした。

了解です。
「プラグイン」という言葉から僕はリフレクションを頭に浮かべたのですが、囚人さん
は「アセンブリ」あたりから静的ロードを連想してしまったということでしょうかね。

# また解決済みが外れてしまった :-)
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -