- PR -

クラスライブラリで自分自身のパスを取得したい。。。

投稿者投稿内容
Java人
ベテラン
会議室デビュー日: 2005/06/24
投稿数: 94
投稿日時: 2006-07-06 12:57
お世話になります。

クラスライブラリ内のクラスにおいて、自分自身のパスを取得したいのですが
可能でしょうか?

開発環境は以下の通りです。
---------------------------------------------------------
ソリューション名:Common
プロジェクト名 :Common
プロジェクト種類:クラスライブラリ
ファイル構成  :XmlReader.vb
SystemException.vb
参照設定    :なし
フォルダ構成  :Common-Common


ソリューション名:Kian
プロジェクト名 :WebApp
プロジェクト種類:WEBアプリケーション
ファイル構成  :app.xml[binフォルダ]
参照設定    :Common.dll
フォルダ構成  :Kian-WebApp
---------------------------------------------------------

クラスライブラリ内で、XMLファイルを読み込みたいのですが、
XMLファイルはbinフォルダに配置しています。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-07-06 13:11
引用:

ともゆきさんの書き込み (2006-07-06 12:57) より:

クラスライブラリ内のクラスにおいて、自分自身のパスを取得したいのですが可能でしょうか?


こちらが参考になると思います。

  DLL での実行パス取得方法

シャドウ コピーを考慮しないのであれば、

コード:

    System.Reflection.Assembly.GetExecutingAssembly().Location


でも良いでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Java人
ベテラン
会議室デビュー日: 2005/06/24
投稿数: 94
投稿日時: 2006-07-06 13:55
じゃんぬねっと様

ほんとに初心者で申し訳ありません。
記載していただいたサイトの内容がまさに私が直面している事でした。

ただ、使い方がよくわかりません。

Dim instance As System.Reflection.Assembly
Console.WriteLine(("CodeBase=" + instance.CodeBase))

としたのですが、
「変数 'instance' は、値が割り当てられる前に使用されています。
 Null 参照の例外が実行時に発生する可能性があります。」
とコンパイラから警告が発せられます。

なにか足りないのでしょうか?
深山
ベテラン
会議室デビュー日: 2006/05/09
投稿数: 66
お住まい・勤務地: 都内某所
投稿日時: 2006-07-06 14:05
引用:

ともゆきさんの書き込み (2006-07-06 13:55) より:

Dim instance As System.Reflection.Assembly


インスタンスを生成していないからでしょ

Dim instance As System.Reflection.Assembly = New System.Reflection.Assembly

では?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-07-06 14:12
お世話になります。

引用:

深山さんの書き込み (2006-07-06 14:05) より:

インスタンスを生成していないからでしょ
Dim instance As System.Reflection.Assembly = New System.Reflection.Assembly
では?


Assembly クラスのデフォルト コンストラクタは、Private なのでアクセスできませんよね。
この書き方であれば、

コード:

    Dim instance As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()


などが正解だと思います。

引用:

ともゆきさんの書き込み (2006-07-06 13:55) より:

Dim instance As System.Reflection.Assembly
Console.WriteLine(("CodeBase=" + instance.CodeBase))

としたのですが、


先にも書きましたが、

コード:

    System.Reflection.Assembly.GetExecutingAssembly().Location


で良いと思います。

Web アプリケーション (ASP.NET) などで、シャドウ コピーを考慮するのであれば、

コード:

    System.Reflection.Assembly.GetExecutingAssembly().CodeBase


です。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Java人
ベテラン
会議室デビュー日: 2005/06/24
投稿数: 94
投稿日時: 2006-07-06 16:14
じゃんぬねっと様

System.Reflection.Assembly.GetExecutingAssembly().CodeBase
を使用してDLLファイルの実行パスが取得できました。

ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-07-06 16:47
引用:

ともゆきさんの書き込み (2006-07-06 16:14) より:

System.Reflection.Assembly.GetExecutingAssembly().CodeBase
を使用してDLLファイルの実行パスが取得できました。


解決はされているようですが...
リンク先にも書いてあるように、URI 表記になる点はご留意くださいね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-07-06 19:18
 先に、最終的にどの様に配置するかを考えましょう。
 前のスレッドにも書きましたが、bin ディレクトリに書き込みを行うと、アプリケーションがリセットします。
前のスレッドでは「logger」という名前でしたが、何かのログ(記録)である以上、誰かが書き込みを行うと考えられます。
書き込みされて、アプリケーションが任意のタイミングでリセットして、はたして大丈夫ですか?
Web アプリなのだから、「アプリケーション ルートからのパス」で指定するのが、安全かと思います。

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