- PR -

C#の参照設定について

1
投稿者投稿内容
hiro-ta
ベテラン
会議室デビュー日: 2003/09/03
投稿数: 79
投稿日時: 2003-10-30 15:45
C#の参照設定ですが、ソース上で行うことはできないでしょうか?
C++だと#using <hogehoge.dll>みたいに書けるのですがこれに相当するものはありますか?

今はメニューから「参照の追加」を選択して参照したいDLLを追加していますが、この方法
を使うと成果物(exe)ができるディレクトリにDLLがコピーされてきてしまうようなんです。
これがなんだか気持ち悪いのでこの方法は使いたくないと思いました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-10-30 16:41
こんにちは。

 そうですか?参照設定の中にSystem.dllやSystem.Windows.dllが含まれていますよね。でも、それらは実行ファイルのあるディレクトリにコピーされていないのではないでしょうか。それらコピーされないDLLと、コピーされるDLLの違いは?

 実行時に参照するDLLを探す方法は、ここにもスレッドがあるので探してみてください。前提条件として、「厳密名を持っている」必要があります。厳密名については、Insider .NETの記事にあります。

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-10-30 17:02 ]
hiro-ta
ベテラン
会議室デビュー日: 2003/09/03
投稿数: 79
投稿日時: 2003-10-30 17:22
>そうですか?参照設定の中にSystem.dllやSystem.Windows.dllが含まれていますよね。
>でも、それらは実行ファイルのあるディレクトリにコピーされていないのではないでしょ
>うか。それらコピーされないDLLと、コピーされるDLLの違いは?
>
おそらくGACに登録しているかどうかの違いではないかと思います。
ただ完全に想像なので違うかもしれませんし、そういったことも含めて私も知りたかったのです。

>実行時に参照するDLLを探す方法は、ここにもスレッドがあるので探してみてください。前提
>条件として、「厳密名を持っている」必要があります。厳密名については、Insider .NETの記>事にあります。
>
私がしりたいのはそういうことではなく、VB.NETやC#などで参照設定をソース上で書くことが
可能かということです。
Insider.NETのアセンブリのロードに関する記事は読んで理解しているつもりです。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-10-30 18:52
C#ならusing、VB.NETならimports。
VS.NETで参照設定すると、この部分が自動的に追加されていると思います。

ソースの記述は以上ですが、コンパイル時に必要なdllを指定する
ことが必要になります。
まずこれが一点。

あと、実行時に必要なdllを探せる必要があります。
これが二点め。

この二点を解決する方法として、VS.NETはdllをコピーする、
という方法をとっているものと思われます。
コマンドラインコンパイラを利用すれば、このあたり
ある程度は自由にできますよ。
でも、F5キーを押すとコンパイル->実行、なんて
便利さはなくなりますけどね。
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2003-10-30 19:52
ソースで指定できるかといわれれば出来ないようです(ダイナミックに解決したり、コード上からプロジェクトの参照設定はいじれるようですけど)。
どうしてもテキストベースで指定したいのなら、makefileでもかいてください。

ローカルにコピーしてほしくないのなら参照のプロパティのローカルコピーをFalseにしてください。一応説明すると
1.ソリューションエクスプローラで参照設定−変えたい参照を選択
2.プロパティウィンドウに表示されたローカルコピーをFalseにする
です。こうすればローカルにコピーされなくなります。
ただ、ローカルコピーをしないので自分で出力フォルダなどをいじって実行に関してのダイナミックな参照切れがないように設定しないとデバッグが出来なくなります。

それにしても疑問なんですが、何で「ローカルコピーがいや」から「ソース上で指定」につながるんですか?
hiro-ta
ベテラン
会議室デビュー日: 2003/09/03
投稿数: 79
投稿日時: 2003-10-30 19:57
>C#ならusing、VB.NETならimports。
>VS.NETで参照設定すると、この部分が自動的に追加されていると思います。
>
ソースに追加されるということですか? 私のところでは自動的に追加されませ
んが、、、そちらでは本当に追加されますか?
だいたい、C#のusing、VB.NETのimportsというのはC++でいうusing namespace
に相当するもので単に名前空間の省略ができるようになるものであり、参照設定と
は関係ないと思いますが。

>ソースの記述は以上ですが、コンパイル時に必要なdllを指定する
>ことが必要になります。
>まずこれが一点。
>
そうですね。これをどうするかも問題なんです。
C++だとプロジェクトのプロパティで「#using参照の解決」という項目があり、
そこで必要なdllのありかを指定しておけば参照設定をしなくても済むのですが、
C#やVB.NETにはこれに相当するものは無いのでしょうか?

>あと、実行時に必要なdllを探せる必要があります。
>これが二点め。
>
これに関してはアプリケーション設定ファイルにdllのありかを指定しておけば
良いので大丈夫です。
hiro-ta
ベテラン
会議室デビュー日: 2003/09/03
投稿数: 79
投稿日時: 2003-10-30 20:32
yaさんありがとうございます。解決しました。

>ローカルにコピーしてほしくないのなら参照のプロパティのローカルコピーをFalse
>にしてください。
>
このような設定があったんですね。気が付きませんでした。


>それにしても疑問なんですが、何で「ローカルコピーがいや」から「ソース上で指定」につなが
>るんですか?
>
上記のような設定があることを知らず、参照設定しなくてもC++の場合はソース上で指定できることからC#でも同様の方法があると思っていたからですが、そもそもコピーさえ防げればソース上で指定できなくても良かったんです。


>>ソースの記述は以上ですが、コンパイル時に必要なdllを指定する
>>ことが必要になります。
>>まずこれが一点。
>>
>そうですね。これをどうするかも問題なんです。
>C++だとプロジェクトのプロパティで「#using参照の解決」という項目があり、
>そこで必要なdllのありかを指定しておけば参照設定をしなくても済むのですが、
>C#やVB.NETにはこれに相当するものは無いのでしょうか?
>
これは参照設定しておけばローカルコピーをFalseにしても大丈夫でした。

教えてくださった皆様、ありがとうございました。_(__)_
1

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