【问题标题】:Difference between "~/Site.Master" and "./Site.Master"“~/Site.Master”和“./Site.Master”的区别
【发布时间】:2018-10-08 17:39:38
【问题描述】:

尝试我的第一个“HELLO WORLD”类型的网络应用程序,该应用程序基于显示 Godaddy 设置的示例程序。

使用 Visual Studio 2017 和 C#。我的程序在localhost/xxxxx 上构建和运行得很好,但是当我尝试发布它时失败了。错误说

解析器错误消息:文件“/Site.Master”不存在

谷歌搜索我读到了使用“./”而不是 VS2017 创建的内容的建议:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="BoincStats._Default" %>

所以我把那个波浪号改成了一个点,我不仅得到一个新的错误

BoincStats.SiteMaster 未找到

但我也发现它不再在我的 Windows-10-x64 系统上运行,除非我将“~/”放回原处。

同样的谷歌搜索建议用 CodeFile 替换 CodeBehind,它甚至未能发布。

首先,我想知道这些功能之间的区别以及何时使用它们。

在 Ubuntu 中,我执行了 mkdir "~/vnc",它在我的根目录中创建了一个名为 vnc 的隐藏目录。查看远程网站 (godaddy) 和我的本地驱动器,我没有看到任何目录“Site.Master”,只有一个位于安装它的“JTest”中的文件。

【问题讨论】:

  • 您还应该使用asp.netasp.net-core 标记此问题,具体取决于您使用的是哪一个。既然你提到了 Ubuntu,我就假设 Core,并且 ~ 对操作系统的含义与 ASP.NET(任何版本)对它的解释方式非常不同。
  • 在 ASP.NET 中,波浪号是站点根目录的简写。这样,在 https://localhost 上调试或部署到 https://foo.com 时,您无需更改任何内容。
  • . 是 web url 路由但是如果你有一个子目录不会认为这也是一样的,但是如果你的网站是 www.goo.com/sysadmin/ 换句话说你有不同的www.goo.com/ 和 www.goo.com/sysadmin/ 的应用程序,那么我相信如果您部署在 sysadmin 中并且您使用 . 它会将您导航到 www.goo.com/ 而不是 www.goo。 com/sysadmin/ 我认为它主要适用于子目录托管。我可能是错的,但这是我的理解。

标签: c# asp.net webforms master-pages


【解决方案1】:
  1. ~/ 指的是应用程序根目录,而./ 指的是文件的目录。这种表示法也在 @Url.Content()Server.MapPath() 等方法中实现。

  2. 至于CodeFileCodeBehind,见this answer

【讨论】:

  • 请注意:您标记了此问题asp.net-core,但 MasterPages 是 ASP.NET WebForms(.NET Framework 最高 4.x)独有的,在 .NET Core 中不存在;出于这个原因,我重新标记了它。
猜你喜欢
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
相关资源
最近更新 更多