2015-10-12 11 views
6

相対パスを使用してASP.Net vNextクラスライブラリからファイルにアクセスしようとしています。ファイルは、アプリケーションのインストールフォルダにあります(その場所にあるはずです)。そのフォルダパスを取得するために必要な完全パスを作成します。アセンブリの実行場所の取得方法は?

System.Reflection.Assembly.GetExecutingAssembly()を使用すると、Locationプロパティは空です。 CodeBaseプロパティには、次のものが含まれています

コードベース=「ファイル:/// C:/Users/username/.dnx/runtimes/dnx-clr-win-x86.1.0.0-beta7/bin/Microsoft .Dnx.Loader.dll "

実行されているファイルの実際のフォルダを取得するにはどうすればよいですか?

編集:私は、すでに説明したようにASP.Net 5は有効ではありませんhere の答え。 - 重複フラグの場合

+1

AppDomain.CurrentDomain.BaseDirectory;を使用して試してみました。 – JFM

+1

[コードが入っているアセンブリのパスを取得するにはどうすればいいですか?](http://stackoverflow.com/questions/52797/how-do-i-get-the-path-of-the-assembly -the-code-is-in) – jrummell

+0

重複していません。私の質問で説明したように、そこの答えはASP.Net 5では有効ではありません。私は朝のJFMの提案をテストします。 –

答えて

6

try IApplicationEnvironment.ApplicationBasePathあなたは、引数としてこれを取るあなたのStartupクラスのコンストラクタを作成することができ、そこに値を取得し、クラスライブラリが利用できるよう:あなたはクラスのインスタンスを取得している場合

public Startup(IApplicationEnvironment env) 
{ 
    _location = env.ApplicationBasePath; 
} 

また、必要DIを介した場所、あなたのクラスライブラリプロジェクトに依存関係として「Microsoft.Dnx.Runtime.Abstractions」を追加し、IApplicationEnvironmentを取るクラスにコンストラクタを追加することができます。

静的クラスで
public MyClass(IApplicationEnvironment env) 
{ 
    Location = env.ApplicationBasePath; 
} 

試してみてください

ProjectRootResolver.ResolveRootDirectory(Directory.GetCurrentDirectory());

ProjectRootResolverMicrosoft.Dnx.Runtime名前空間にあります。

+0

Brilliant! :)チャームのように動作します。私は以前に 'Microsoft.Framework.Runtime'ステートメントを使用していましたが、それは失敗しました。 'Using Microsoft.Dnx.Runtime'が動作します。 –

+0

これを静的クラスでどのように取得するか考えてみましょうか?静的コンストラクタは常にパラメータなしです –

+0

@MoslemBenDhaou上記の私の編集をご覧ください。あなたのために働くことを願っています。 –

0

おそらく、AppDomain.CurrentDomain.BaseDirectoryは、アプリケーションのインストールディレクトリに相対的な場所にあるファイルにアクセスする場合に最も便利です。

Best way to get application folder pathはそれが役に立てば幸い以上でご覧ください。

+0

残念ながら。まだ 'C:\ Users \ username \ .dnx \ runtimes \ dnx-clr-win-x86.1.0.0-beta7 \ bin \'を与えています。 –

+0

AppDomainは.NETコアに存在しません –

関連する問題