【问题标题】:using virtual directories in a single azure website在单个 Azure 网站中使用虚拟目录
【发布时间】:2017-06-11 22:12:40
【问题描述】:

我发现这篇 answerthis 旧文章一致,但两者都不起作用。因此,我在这里询问一个适用于 VS2017 的新解决方案。 我将更详细地解释: 第一次定义虚拟目录(如“/site1”和物理文件夹“site\site1”)并尝试从 VS2017 发布时,收到错误消息(无法写入指定路径)并且无法发布。 然后,如果您进入控制台(从 portal.azure.com)并手动在 d:\site 下使用“md site1”创建文件夹),发布过程将正常工作(并且在新文件夹下创建了很多文件)并且以“1成功...”结束,但是当您浏览到新的 ..../site1 时,您会收到以下错误消息: “由于发生内部服务器错误,无法显示页面。”

在网络上找不到任何东西来解决这个特定错误(在一个旧文档中,他们说这是由于 2 个项目(在同一个解决方案中)的单独 git 存储库,一个针对根文件夹,另一个针对针对虚拟目录,但我不明白为什么通过VS2017发布时不同的源代码控制会在生产中产生麻烦)......

有人知道怎么解决吗?

David Ebbo 要求的更新: 我认为问题是Azure方面的配置问题(其他文章没有说明您必须在定义虚拟目录时通过控制台创建物理文件夹)和/或运行时错误(创建物理文件夹时从VS2017发布过程有效并成功完成)。

以下是了解上下文的更多详细信息: 1) Visual Studio 解决方案包含 2 个项目:一个“主项目”(带有“Hello world!”的空 .NET Core 项目),其发布配置文件针对 Azure 网站的根文件夹 + 另一个“子项目”(标准 MVC Core. NET 模板项目),发布配置文件针对同一 Azure 站点,并在“站点名称”和“站点 url”的尾部添加了“/site1”。 2)如果我尝试将子项目发布到站点的根文件夹,一切正常(但当然我会覆盖“主项目”),因此这不是代码/版本问题。 3) 通过控制台,我可以看到文件夹 d:\home\site\site1 包含与主项目 d:\home\site\wwwroot 中的文件“相似”的文件。

【问题讨论】:

  • 我认为关于您的问题是否与 VS Publishing 相关(即文件未在正确的位置)或运行时相关(文件存在但不能像您一样运行),我认为这个问题还不够清楚预计)。请参阅this post 并相应改写。

标签: git azure-web-app-service visual-studio-2017 virtual-directory


【解决方案1】:

首次定义虚拟目录(如“/site1”和物理文件夹“site\site1”)并尝试从 VS2017 发布时,收到错误消息(无法写入指定路径)并且无法发布。

我创建了一个虚拟目录并从 VS 2017 发布了一个 Web 应用程序。我无法重现您的问题。这是我的详细步骤。

步骤 1. 从 Azure 门户创建一个虚拟目录。请确保您已选中 [Application] 复选框并单击 [Save] 按钮。

第 2 步。使用 VS 2017 部署 Web 应用程序。从 VS 部署窗口中搜索并选择应用服务。

Step 3. 点击设置按钮配置虚拟目录。

步骤 4. 根据虚拟目录名称更改站点名称和目标 URL。

第 5 步。单击发布按钮以发布 Web 应用程序。

发布我的网络应用程序后,我可以从以下 URL 成功查看网络应用程序。

http://mysitename.azurewebsites.net/site1

请检查我的步骤和你的步骤是否有任何不同。

当您浏览到新的 ..../site1 时,您会收到以下错误消息:“该页面无法显示,因为发生了内部服务器错误。”

如果是您的网络应用程序引起的,建议您将 customErrors 模式属性更改为“关闭”以查看详细的错误消息。

<system.web>
    <customErrors mode="Off" />
</system.web>

编辑 2017/6/13 10:37

该问题与 ASP.NET Core 有关。当我发布 ASP.NET Core Web 应用程序时,我可以重现该问题。

我们可以从this official document找到原因。

将应用程序添加到 IIS 站点的根应用程序时,根应用程序 web.config 文件应包含将 ASP.NET Core 模块添加为应用程序处理程序的部分。添加到根应用程序的应用程序不应包含该部分。如果您在子应用程序的 web.config 文件中重复该部分,您将在尝试浏览子应用程序时收到引用错误配置文件的 500.19(内部服务器错误)。

为了解决这个问题,我们需要编辑这个子目录中的 web.config 文件。我们可以使用 kudu 控制台来完成。点击 web.config 文件前面的编辑​​按钮。

删除 aspNetCore 处理程序并单击保存。

【讨论】:

  • 嗨,Amor,是的,步骤完全相同,但如果我不在 d:\home\site\site1 中为 site1 手动创建物理文件夹,则发布不起作用。这是第一个区别......你不创建物理文件夹,我必须这样做。另一件事:我没有任何包含 部分的文件...我是否必须在 site1 项目的 web.config 中添加该块?请问具体在哪里?
  • 无论如何,请记住,当我在根文件夹“/”(映射到 d:\home\site\wwwroot)中部署“site1”应用程序时,它会完美启动,因此我不认为此问题(“由于发生内部服务器错误,无法显示页面。”错误消息)可能与代码有关。
  • 问题与ASP.NET Core有关,我修改回复添加解决方案。
  • 非常好!它可以工作,但是... web.config 文件在我进行新发布时被“错误”文件替换。如果我在项目中根本看不到它(在 VS2017 中),如何保留正确的 web.config 文件?谢谢
  • @Pj 是的,我找到了解决方案:没有部署必须留在根虚拟文件夹中!我使用 kudu 控制台 CMD 完全清除文件夹 d:\home\site\wwwroot 和任何子文件夹。虚拟 / 文件夹中没有发布 webapp,但只发布到 /site1 /site2 等。这样子文件夹中就不会再生成 web.config 文件了。
猜你喜欢
  • 1970-01-01
  • 2015-02-04
  • 2018-05-08
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
相关资源
最近更新 更多