C:/ dirにあるプログラムa.exeから、テキストファイルc:/dir/text.txtを開く必要があります。 a.exeの場所がわかりませんが、text.txtは常に同じパスにあります。テキストファイルにアクセスできるように、現在実行中のアセンブリの名前を内部からプログラム自体に取得する方法は?
[〜#〜] edit [〜#〜]:a.exeがWindowsサービスの場合はどうなりますか? Windowsアプリケーションではないため、アプリケーションはありません。
前もって感謝します。
私は通常、アプリケーションの.exeを含むディレクトリに次の方法でアクセスします。
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
string exePath = Application.ExecutablePath;
string startupPath = Application.StartupPath;
編集-アプリケーションオブジェクトを使用しない場合:
string path = System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase );
詳細はこちらをご覧ください:
興味のあるアセンブリを取得します(たとえば、_System.Reflection.Assembly a
_変数に割り当てられます):
System.Reflection.Assembly.GetEntryAssembly()
、またはtypeof(X).Assembly
クラスの場合X
は、興味のあるアセンブリにあります(Windowsフォームの場合、typeof(Program)
を使用できます)次に、そのAssembly a
のロード元のファイルのパスを取得します。
System.IO.Path.GetDirectoryName(a.Location)
他の回答で説明されているように、WindowsフォームアプリケーションからのApplication
オブジェクトも可能です。
VB.NETでは、次の方法で取得できます。
Assembly.GetEntryAssembly.Location
C#の場合:
Assembly.GetEntryAssembly().Location
nUnitでのテストでも、peSHlrの答えを使用するとうまくいきました。
var thisType = typeof(MyCustomClass);
var codeLocation = Path.GetDirectoryName(thisType.Assembly.Location);
var codeLocationPath = Path.GetDirectoryName(codeLocation);
var appConfigPath = Path.Combine(codeLocationPath, "AppConfig");