我有一个类库,我可以使用下面的代码从应用程序路径访问文件。它无法在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}");
}
答案 0 :(得分:4)
要在您的webapp上获取确切的文件路径,您可能需要进行试错。
下面的代码就是我在ASP.NET项目中使用的代码。假设您有一个名为scenarios
和filename
变量的文件夹;
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;
让我们看看每个条件的值;
Environment.GetEnvironmentVariable("HOME")
:此值适用于Azure WebApp。 Azure WebApp具有主机根目录的默认环境变量。您可以将提供的变量检查为here
HttpContext.Current
:当您在桌面上进行开发时,此值适用于使用OWIN selfhost的iisexpress。
rootPath = ".";
此值适用于经典IIS。
因此,查找已发布文件路径的最佳快捷方式可以是
WebApp > Advanced Tools (a.k.a Kudu) menu > Debug Console menu on top > CMD
查看已发布的文件。它将在浏览器上显示类似浏览器的界面。Environment.GetEnvironmentVariable("HOME") + "\\site\\wwwroot\\bin\\" + yourdirectory + "\\" + SolutionName
并检查文件是否已成功加载。