2012-10-30 10 views
6

クラスファイルにビルドアクションがcontentのExcelファイルがあります。ライブラリはASP.NET WebFormsアプリケーションとコンソールアプリケーションの両方で参照され、Excelファイルは両方で使用されます。プログラムでこのファイルのファイルパスを取得する方法はありますか?クラスライブラリのコンテンツのファイルパスを取得する方法

私はこれを行うことができますASPで知っている:

HttpContext.Current.Server.MapPath(@"bin") 

そして、私はこれを行うことができ、コンソールアプリで:

Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) 

これらの作業を、より良い、連結があります場合、私は思ったんだけどアセンブリからファイルを見つけてパスを返します。

答えて

1

2番目のアプローチは、エントリアセンブリだけでなく特定のアセンブリを探すように変更する必要があるすべての環境で正常に機能します。これを行うには

最も簡単な方法は次のとおりです。

typeof(Some.Type.From.That.Assembly).Assembly.Location 

代替は、あなたがアセンブリから直接ファイルを読み込むことができるように埋め込まれたリソースを使用することです。もちろん、ファイルがユーザーによって書き込み可能でなければならない場合、これは機能しません。

+0

埋め込みリソースはうまく動作しません。なぜなら、Excelファイルとの相互運用が必要でディスク上に必要なためです。私は、 'bin'ディレクトリに' MapPath'や 'Path.Combine'を実行することを避けたいと考えていましたが、別の方法がないかもしれません... –

+0

埋め込みリソースからファイルをtempディレクトリそこで相互運用を行います。また、複数のプロセスがファイルにアクセスした場合、または何らかの理由でExcelがファイルを解放しない場合に問題が発生するのを防ぐことができます。 –

関連する問題