1

私は、以下のコードを使用してアプリケーションパスからファイルにアクセスしているクラスライブラリを持っています。それはアプリケーションパスを見つけることができないので、紺碧の上で動作しません。それは私のローカルマシン上で正常に動作するように晴れて仕事をする方法。Azure WebAppでasp.netクラスライブラリプロジェクトのファイルパスを取得する

private string GetProjectPath() 
     { 
      string SolutionName = "MyApi.sln"; 
      //Get name of the target project which we want to test 

      var projectName = typeof(TerminationMatchInquiry).GetTypeInfo().Assembly.GetName().Name; 

      //Get currently executing test project path 
      var applicationBasePath = new Uri((typeof(TerminationMatchInquiry).GetTypeInfo().Assembly.CodeBase)).LocalPath; 
      //Find the folder which contains the solution file. We then use this information to find the 
      //target project which we want to test 
      DirectoryInfo directoryInfo = new DirectoryInfo(applicationBasePath); 
      do 
      { 
       var solutionFileInfo = new FileInfo(Path.Combine(directoryInfo.FullName, SolutionName)); 
       if (solutionFileInfo.Exists) 
       { 
        return Path.GetFullPath(Path.Combine(directoryInfo.FullName, projectName)); 
       } 
       directoryInfo = directoryInfo.Parent; 
      } 
      while (directoryInfo.Parent != null); 

      throw new Exception($"Solution root could not be located using application root {applicationBasePath}"); 
     } 
+0

あなたはAzure WebAppを意味しますか? – Youngjae

+0

はいAzure WebApp – maxspan

+0

もちろん、それは紺碧の上にそれを見つけることはありません!アプリケーションを配備すると、ビルド/公開プロセスによって作成されたバイナリ成果物だけがソースコード**を配備しません。 – Tseng

答えて

3

ウェブアプリケーションで正確なファイルパスを取得するには、試行錯誤が必要な場合があります。

以下のコードは、私がASP.NETプロジェクトで使用したものです。たとえば、scenariosfilenameという名前のフォルダがあるとします。

string rootPath; 
if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("HOME"))) 
    rootPath = Environment.GetEnvironmentVariable("HOME") + "\\site\\wwwroot\\bin"; 
else if (HttpContext.Current != null) 
    rootPath = HttpContext.Current.Server.MapPath("~"); 
else 
    rootPath = "."; 
string path = rootPath + "\\scenarios\\" + filename; 

各条件の値を見てみましょう。

  1. Environment.GetEnvironmentVariable("HOME"):この値はAzure WebAppの値です。 Azure WebAppには、ホストルートディレクトリのデフォルト環境変数があります。提供された変数をhere

  2. HttpContext.Currentとして確認できます。この値は、デスクトップで開発するときにOWINセルフホストを使用する場合に使用します。

  3. rootPath = ".";この値は、従来のIIS用です。

    だから、

、公表されたファイルパスを見つけるための最良のショートカットが可能性があり、

  1. は、あなたのファイルがうまくWebAppの上に配備されて参照してください。公開ファイルはWebApp > Advanced Tools (a.k.a Kudu) menu > Debug Console menu on top > CMDで確認できます。ブラウザ上にエクスプローラのようなインターフェイスが表示されます。
  2. filepathのようにログを書き込もうとします。 Environment.GetEnvironmentVariable("HOME") + "\\site\\wwwroot\\bin\\" + yourdirectory + "\\" + SolutionNameを読み込み、ファイルが正常に読み込まれたことを確認してください。
+0

これはasp.netコア用のコードです。 – maxspan

+0

@maxspan // 'Environment.GetEnvironmentVariable'もコアで動作します。まず試してみてください:)このリンクはhttps://stackoverflow.com/questions/38571032/how-to-get-httpcontext-current-in-asp-net-coreを記述しているので、 'HttpContext.Current'には代替があります。あなたのdevの設定としてこの値は正常に動作します。 – Youngjae

関連する問題