在 visual studio 2015 年为网站设置根 (~)
set root (~) for web site in visual studio 2015
所以这让我发疯...
我在 Visual Studio 2015 年的一个网站上工作(所以从开始页面开始:文件>新建>网站...不是新建项目>Web>ASP.NET Web 应用程序)并且一切进展顺利我使用 VS 作为 debugger/localshost.
现在,谨慎起见,我想将网站上传到 www.mysite.com/sandbox/ 文件夹,我可以在其中测试一些其他项目,例如数据库访问等(因为该网站是实时的,我不想在我准备好之前替换它)。但出于某种原因,所有文件(通过本地主机运行良好)似乎都指向母版页和其他项目的“/”而不是“/sandbox/”...
有什么办法可以告诉 VS 根目录不在它认为的位置?
到目前为止,我已经证实这纯粹是根位置的问题:我谨慎地创建了一个不同的项目(使用我可以在实时服务器上轻松找到和删除的文件名)来查看服务器上是否有任何问题,但如果我将文件中的根目录与服务器上的根目录保持相同,它们就可以正常加载(换句话说,如果我将我的网站上传到根目录,引用就可以了)。顺便说一句,我过去曾这样做过,我直接在一个不活跃但运行良好的网站的根级别工作。
有什么办法(也许在 web.config 中)我可以告诉它,每当我在页面上设置 MasterPageFile= "~/Master/masterPage.master" 时,它应该实际上指向 MasterPageFile= "~/sandbox/Master/masterPage.master" ?我的印象是“~”会解决这个问题,但显然不是?
基于 Google 搜索,我发现在 Web 应用程序(而不是网站)中有一种方法可以定义 'Web' 部分,但该选项在这里似乎不可用...
如有任何帮助,我们将不胜感激。
谢谢,
乔伊
编辑:
所以,有人告诉我这看起来像 "wall of text"(不管那是什么意思)...
让我一步一步地给出更多细节作为例子,也许有人可以在正确的方向打我一巴掌。
- 打开 VS2015,转到“文件”>“新建”>“网站”...从中选择
Installed\Tempates\Visual Basic\ASP.NET 空网站 -> 确定
右键单击解决方案下的项目并添加>母版页,然后
编辑 MasterPage.master 以包含以下内容:
<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
Some Content from Master
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
添加 >Web 表单(默认)并编辑其内容以阅读:
<%@ Page Language="VB" AutoEventWireup="false" MasterPageFile="~/MasterPage.master" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<asp:Content ContentPlaceHolderID="ContentPlaceHolder1" runat="server" >
<p>Some Data from Page</p>
</asp:Content>
现在我用 F5 测试 运行 它,我得到一个浏览器 window 显示 "Some Data from Page"... 正如预期的那样。
现在是时候将它上传到我的服务器(由 1&1 托管)了:
- 转到“构建”>“发布 Web 应用程序”
- 个人资料>自定义个人资料
- 连接>发布方法:FTP
- 服务器:example.com
- 站点路径:/sandbox/
- 目的地 URL:http://www.example.com/sandbox/Default.aspx
- 设置>(保持默认)
当我点击“发布”时,它会将我带到 Default.aspx 页面,但显示:
Parser Error
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.
Parser Error Message: The file '/MasterPage.master' does not exist.
Source Error:
Line 1: <%@ Page Language="VB" AutoEventWireup="false" MasterPageFile="~/MasterPage.master" CodeFile="Default.aspx.vb" Inherits="_Default" %>
Line 2:
Line 3: <asp:Content ContentPlaceHolderID="ContentPlaceHolder1" runat="server" >
源文件:/sandbox/siteTest/Default.aspx 行:1
我的问题是:我需要在哪里告诉 Visual Studio 文件夹结构确实包含“/sandbox/”文件夹下的所有内容,而不仅仅是“/”?我知道我可以进入 Default.aspx 文件并将语句更改为 MasterPageFile="~/sandbox/MasterPage.master"
但必须有更好的方法...?我期望 Publish 选项中的条目会执行此操作,但它不会...或者,我尝试在 PreInit 事件期间以编程方式更改它,但这没有用...
谢谢,J
首先,确保您确实在所有应用根目录相对 URL 中使用 ~/
。
其次,确保您的应用程序在 IIS 应用程序范围内 - 这是最重要的一步,因为这是 IIS 告诉 ASP.NET /sandbox/
(子目录)是您应用程序的根目录的方式而不是 /
(您网站的根目录)。
在 IIS 管理器中,在左侧的树视图中打开您的网站,然后 select 代表应用程序根目录的目录(或虚拟目录),右键单击它并选择 "Convert to Application".
还要确保您的应用程序的根目录 web.config
和 bin
目录位于 /sandbox/
目录中,而不是网站本身的根目录。
好的...我想我找到了解决办法。也许只是有点 hack-y,但它可以满足我的需要,希望其他人会觉得这很有用。
在尝试了一些其他选项之后,适合我需要的选项是保持结构不变,但使用子域进行测试。所以现在我发布到 sandbox.example.com 而不是示例。com/sandbox
服务器现在认为“~/”文件夹实际上是我将子域指向的位置。
感谢您的努力和反馈。
所以这让我发疯...
我在 Visual Studio 2015 年的一个网站上工作(所以从开始页面开始:文件>新建>网站...不是新建项目>Web>ASP.NET Web 应用程序)并且一切进展顺利我使用 VS 作为 debugger/localshost.
现在,谨慎起见,我想将网站上传到 www.mysite.com/sandbox/ 文件夹,我可以在其中测试一些其他项目,例如数据库访问等(因为该网站是实时的,我不想在我准备好之前替换它)。但出于某种原因,所有文件(通过本地主机运行良好)似乎都指向母版页和其他项目的“/”而不是“/sandbox/”...
有什么办法可以告诉 VS 根目录不在它认为的位置?
到目前为止,我已经证实这纯粹是根位置的问题:我谨慎地创建了一个不同的项目(使用我可以在实时服务器上轻松找到和删除的文件名)来查看服务器上是否有任何问题,但如果我将文件中的根目录与服务器上的根目录保持相同,它们就可以正常加载(换句话说,如果我将我的网站上传到根目录,引用就可以了)。顺便说一句,我过去曾这样做过,我直接在一个不活跃但运行良好的网站的根级别工作。
有什么办法(也许在 web.config 中)我可以告诉它,每当我在页面上设置 MasterPageFile= "~/Master/masterPage.master" 时,它应该实际上指向 MasterPageFile= "~/sandbox/Master/masterPage.master" ?我的印象是“~”会解决这个问题,但显然不是?
基于 Google 搜索,我发现在 Web 应用程序(而不是网站)中有一种方法可以定义 'Web' 部分,但该选项在这里似乎不可用...
如有任何帮助,我们将不胜感激。
谢谢,
乔伊
编辑:
所以,有人告诉我这看起来像 "wall of text"(不管那是什么意思)... 让我一步一步地给出更多细节作为例子,也许有人可以在正确的方向打我一巴掌。
- 打开 VS2015,转到“文件”>“新建”>“网站”...从中选择
Installed\Tempates\Visual Basic\ASP.NET 空网站 -> 确定 右键单击解决方案下的项目并添加>母版页,然后 编辑 MasterPage.master 以包含以下内容:
<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder> </head> <body> <form id="form1" runat="server"> <div> <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> Some Content from Master </asp:ContentPlaceHolder> </div> </form> </body> </html>
添加 >Web 表单(默认)并编辑其内容以阅读:
<%@ Page Language="VB" AutoEventWireup="false" MasterPageFile="~/MasterPage.master" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<asp:Content ContentPlaceHolderID="ContentPlaceHolder1" runat="server" >
<p>Some Data from Page</p>
</asp:Content>
现在我用 F5 测试 运行 它,我得到一个浏览器 window 显示 "Some Data from Page"... 正如预期的那样。
现在是时候将它上传到我的服务器(由 1&1 托管)了:
- 转到“构建”>“发布 Web 应用程序”
- 个人资料>自定义个人资料
- 连接>发布方法:FTP
- 服务器:example.com
- 站点路径:/sandbox/
- 目的地 URL:http://www.example.com/sandbox/Default.aspx
- 设置>(保持默认)
当我点击“发布”时,它会将我带到 Default.aspx 页面,但显示:
Parser Error
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.
Parser Error Message: The file '/MasterPage.master' does not exist.
Source Error:
Line 1: <%@ Page Language="VB" AutoEventWireup="false" MasterPageFile="~/MasterPage.master" CodeFile="Default.aspx.vb" Inherits="_Default" %>
Line 2:
Line 3: <asp:Content ContentPlaceHolderID="ContentPlaceHolder1" runat="server" >
源文件:/sandbox/siteTest/Default.aspx 行:1
我的问题是:我需要在哪里告诉 Visual Studio 文件夹结构确实包含“/sandbox/”文件夹下的所有内容,而不仅仅是“/”?我知道我可以进入 Default.aspx 文件并将语句更改为 MasterPageFile="~/sandbox/MasterPage.master"
但必须有更好的方法...?我期望 Publish 选项中的条目会执行此操作,但它不会...或者,我尝试在 PreInit 事件期间以编程方式更改它,但这没有用...
谢谢,J
首先,确保您确实在所有应用根目录相对 URL 中使用 ~/
。
其次,确保您的应用程序在 IIS 应用程序范围内 - 这是最重要的一步,因为这是 IIS 告诉 ASP.NET /sandbox/
(子目录)是您应用程序的根目录的方式而不是 /
(您网站的根目录)。
在 IIS 管理器中,在左侧的树视图中打开您的网站,然后 select 代表应用程序根目录的目录(或虚拟目录),右键单击它并选择 "Convert to Application".
还要确保您的应用程序的根目录 web.config
和 bin
目录位于 /sandbox/
目录中,而不是网站本身的根目录。
好的...我想我找到了解决办法。也许只是有点 hack-y,但它可以满足我的需要,希望其他人会觉得这很有用。 在尝试了一些其他选项之后,适合我需要的选项是保持结构不变,但使用子域进行测试。所以现在我发布到 sandbox.example.com 而不是示例。com/sandbox 服务器现在认为“~/”文件夹实际上是我将子域指向的位置。
感谢您的努力和反馈。