在 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"(不管那是什么意思)... 让我一步一步地给出更多细节作为例子,也许有人可以在正确的方向打我一巴掌。

  1. 打开 VS2015,转到“文件”>“新建”>“网站”...从中选择
    Installed\Tempates\Visual Basic\ASP.NET 空网站 -> 确定
  2. 右键单击解决方案下的项目并添加>母版页,然后 编辑 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>
    

  3. 添加 >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 托管)了:

当我点击“发布”时,它会将我带到 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.configbin 目录位于 /sandbox/ 目录中,而不是网站本身的根目录。

好的...我想我找到了解决办法。也许只是有点 hack-y,但它可以满足我的需要,希望其他人会觉得这很有用。 在尝试了一些其他选项之后,适合我需要的选项是保持结构不变,但使用子域进行测试。所以现在我发布到 sandbox.example.com 而不是示例。com/sandbox 服务器现在认为“~/”文件夹实际上是我将子域指向的位置。

感谢您的努力和反馈。