- - PR -
クラスライブラリで自分自身のパスを取得したい。。。
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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フォルダに配置しています。 | ||||||||||||||||||||
|
投稿日時: 2006-07-06 13:11
こちらが参考になると思います。 DLL での実行パス取得方法 シャドウ コピーを考慮しないのであれば、
でも良いでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||
|
投稿日時: 2006-07-06 13:55
じゃんぬねっと様
ほんとに初心者で申し訳ありません。 記載していただいたサイトの内容がまさに私が直面している事でした。 ただ、使い方がよくわかりません。 Dim instance As System.Reflection.Assembly Console.WriteLine(("CodeBase=" + instance.CodeBase)) としたのですが、 「変数 'instance' は、値が割り当てられる前に使用されています。 Null 参照の例外が実行時に発生する可能性があります。」 とコンパイラから警告が発せられます。 なにか足りないのでしょうか? | ||||||||||||||||||||
|
投稿日時: 2006-07-06 14:05
インスタンスを生成していないからでしょ Dim instance As System.Reflection.Assembly = New System.Reflection.Assembly では? | ||||||||||||||||||||
|
投稿日時: 2006-07-06 14:12
お世話になります。
Assembly クラスのデフォルト コンストラクタは、Private なのでアクセスできませんよね。 この書き方であれば、
などが正解だと思います。
先にも書きましたが、
で良いと思います。 Web アプリケーション (ASP.NET) などで、シャドウ コピーを考慮するのであれば、
です。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||
|
投稿日時: 2006-07-06 16:14
じゃんぬねっと様
System.Reflection.Assembly.GetExecutingAssembly().CodeBase を使用してDLLファイルの実行パスが取得できました。 ありがとうございました。 | ||||||||||||||||||||
|
投稿日時: 2006-07-06 16:47
解決はされているようですが... リンク先にも書いてあるように、URI 表記になる点はご留意くださいね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||
|
投稿日時: 2006-07-06 19:18
先に、最終的にどの様に配置するかを考えましょう。
前のスレッドにも書きましたが、bin ディレクトリに書き込みを行うと、アプリケーションがリセットします。 前のスレッドでは「logger」という名前でしたが、何かのログ(記録)である以上、誰かが書き込みを行うと考えられます。 書き込みされて、アプリケーションが任意のタイミングでリセットして、はたして大丈夫ですか? Web アプリなのだから、「アプリケーション ルートからのパス」で指定するのが、安全かと思います。 |