在Azure WebApp上获取asp.net类库项目中的文件路径

时间:2017-06-20 02:00:53

标签: c# azure asp.net-core azure-web-sites azure-web-app-service

我有一个类库,我可以使用下面的代码从应用程序路径访问文件。它无法在azure上工作,因为它无法找到应用程序路径。如何使它工作天蓝色,因为它在我的本地机器上工作正常。

 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}");
        }

1 个答案:

答案 0 :(得分:4)

要在您的webapp上获取确切的文件路径,您可能需要进行试错。

下面的代码就是我在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。

  4. 因此,查找已发布文件路径的最佳快捷方式可以是

    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并检查文件是否已成功加载。