2017-05-12 75 views
-1



所以这让我疯狂......
我在Visual Studio 2015的一个网站上工作(所以从开始页面:File> New>网站...不是新建项目> Web> ASP.NET Web应用程序),当我使用VS作为调试器/本地主机时,事情进展顺利。
现在,谨慎起见,我想上传该网站到一个www.mysite.com/sandbox/文件夹,我可以测试一些其他项目,如数据库访问等(因为该网站是活的,我不'我想要替换它,直到我准备好了)。但由于某种原因,所有文件(通过本地主机工作正常)似乎指向“/”的母版页和其他项目,而不是“/ sandbox /”...
有没有什么办法可以告诉VS根不在它认为的地方? 到目前为止,我已经证实,这纯粹是根源位置:我谨慎地创建了一个不同的项目(使用文件名,我可以在实时服务器上轻松找到&删除),以查看服务器上是否有任何错误,但如果我将文件中的根保存为与服务器上的根相同(换句话说,如果我将我的网站上传到根目录,那么引用就可以),它们会正常加载。顺便说一句,我以前在做过这些工作的时候,我直接在一个不活跃的网站的根级别工作,并且一切正常。
是否有任何方式(可能在web.config中)我可以告诉它,我在任何时候设置了MasterPageFile =“〜/ Master/masterPage.master”它实际上应该指向MasterPageFile =“〜/沙箱/ Master/masterPage.master“?我的印象是“〜”会照顾到这一点,但显然不是? 基于谷歌搜索,我发现在Web应用程序(而不是网站)中有一种方法来定义“Web”部分,但该选项似乎并不适用于此...为Visual Studio 2015设置网站根(〜)

任何帮助将不胜感激。
谢谢,
JoeE

编辑:

所以,我说这看起来像一个“文本的墙”(不管这可能意味着)... 让我透露更多的细节与步骤举个例子,或许有人可以给我正确的方向。

  1. 打开VS2015,转到文件>新建> Web站点......从
    安装选\ Tempates \ Visual Basic中\ ASP.NET空Web站点 - >确定
  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,我得到的是说,一个浏览器窗口“一些页面数据”......如预期的那样。

现在来的时间把它上传到我的服务器(由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" > 

源文件:/沙/ siteTest /默认。 ASPX线:1个

我的问题是这样的:我在哪里需要告诉Visual Studio中的文件夹结构的确不包含一切下的“/沙箱/”文件夹中,而不是仅仅“/”?我知道我可以进入Default.aspx文件,并将语句更改为MasterPageFile="~/sandbox/MasterPage.master",但是那里有一个更好的方法...?我期待发布选项中的条目可以做到这一点,但它不会...或者,我尝试以编程方式在PreInit事件期间更改此设置,但这并不奏效...

谢谢, Ĵ

+0

你可能要考虑重写这个。在目前的形式中,这看起来像是一长串文字。 –

回答

0

好吧...我想我找到了解决办法。也许只是一点触动,但它适用于我所需要的,希望别人可能会觉得这很有用。 在尝试了其他一些选项之后,为我所需要的工作之一是保持结构不变,但是要使用子域进行测试。所以,现在我发布到sandbox.example.com而非example.com/sandbox 服务器现在认为这个“〜/”文件夹实际上是在那里我点的子域。

感谢您的努力&反馈。

0

首先,确保你实际上在所有的应用程序根目录相对URL的使用~/

其次,确保您的应用程序位于IIS应用程序范围内 - 这是最重要的一步,因为它告诉ASP.NET,/sandbox/(子目录)是应用程序的根,而不是/(根你的网页)。

在IIS管理器中,在左侧的树视图中打开您的网站,并选择代表应用程序根目录的目录(或虚拟目录),右键单击它并选择“转换为应用程序”。

另外请确保您的应用程序的根目录web.configbin目录位于/sandbox/目录中,而不是网站本身的根目录。

+0

当我发布该网站时,它会得到一个“解析器错误消息:文件'/ Master/MasterPage.master'不存在。”我已经检查过,主页面应该在哪里。 – JoeEg

+0

关于IIS管理器...我没有访问权限。此外,我不想'将其转换为应用程序',这不是问题AFAIK ... web.config位于/ sandbox /文件夹中。 Web站点没有/ bin(Web应用程序会有一个)... – JoeEg

+0

@JoeEg“转换为应用程序”与“ASP.NET Web应用程序”项目没有任何关系。 “IIS应用程序”是IIS如何隔离网站的不同区域并在ASP.NET中设置“〜”系统。 – Dai