1

我有一個類庫,其中我使用下面的代碼從應用程序路徑訪問文件。它不會在azure上工作,因爲它無法找到應用程序路徑。因爲它可以在我的本地機器上正常工作,所以如何使它工作在天藍色。在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網絡應用程序 – maxspan

+0

當然,它不會在azure上找到它!在部署應用程序時,您不會部署源代碼**僅由構建/發佈過程創建的二進制工件 – Tseng

回答

3

爲了獲得在你的web應用一個確切的文件路徑,您可能需要有試驗和錯誤。

下面的代碼是我在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 selfhost進行iisexpress。

  3. rootPath = ".";此值適用於傳統IIS。

所以,最好的捷徑,找到已發佈的文件路徑可能是,

  1. 請參閱文件以及部署在Web應用程序。您可以使用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'也適用於核心。嘗試它首先:)'HttpContext.Current'有替代,因爲這個鏈接描述https://stackoverflow.com/questions/38571032/how-to-get-httpcontext-current-in-asp-net-core你可以省略檢查這個值作爲你的開發設置工作正常。 – Youngjae

相關問題