【问题标题】:How can I deploy a .Net application in the subfolder of a website?如何在网站的子文件夹中部署 .Net 应用程序?
【发布时间】:2012-07-15 20:38:26
【问题描述】:

我有一个名为 BasicTestProject 的 .Net 4.0 项目,它包含一个名为 Default 的网络表单。

Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" 
         CodeBehind="Default.aspx.cs" Inherits="BasicTestProject.Default" %>

Default.aspx.cs:

namespace BasicTestProject 
{
    public partial class Default : System.Web.UI.Page 
    {
       ...
    }
}

我想将此应用程序的编译版本放在网站的子文件夹中:

  • 网站根目录
    • 子文件夹
      • 基本测试项目

在网站根目录,我有一个基本的 web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.web>
        <compilation targetFramework="4.0" />
    </system.web>
</configuration>

我对上面的示例进行了测试,当我尝试访问子文件夹 (http://WebsiteRoot/SubFolder/BasicTestProject/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: Could not load type 'BasicTestProject.Default'.

Source Error: 

Line 1:  <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="BasicTestProject.Default" %>
Line 2:  
Line 3:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Source File: /*WebsiteRoot*/*SubFolder*/BasicTestProject/default.aspx    Line: 1 

--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272 

另外,我应该提到我已经尝试将我编译的 BasicTestProject 放在它自己的 IP 地址上,以便它位于根文件夹中。这按预期工作,我可以访问 Default.aspx。

更新(答案):

在 IIS7 中,我右键单击 BasicTestProject 并将其转换为应用程序。

  • 网站根目录
    • 子文件夹
      • 基本测试项目

我还必须授予应用程序池用户对 BasicTestProject 文件夹的权限。它现在是独立运行的。

【问题讨论】:

  • BasicTestProject bin 文件夹是否需要位于网站根目录下?

标签: asp.net .net iis-7


【解决方案1】:

您是否将该子文件夹配置为 IIS 中的应用程序?

【讨论】:

    【解决方案2】:

    我将详细说明@MikeC 的回答:在 IIS 中有“应用程序范围”的概念,它是属于同一概念“应用程序”的 文件系统 树的子层次结构”。

    每个单独的 IIS 网站的根也被标记为新应用程序范围的根。在作用域中执行的任何服务器端代码都在作用域所属的应用程序池中运行(例如,CGI 和 FastCGI 进程在作用域池的标识下启​​动)。 ASP.NET 通过将应用程序范围的根定义为它期望找到 bin 目录的位置并允许定义更多 web.config 选项,从而进一步实现了这一点。

    正如我所说,这适用于文件系统层次结构,所以如果您使用 URL 重写或 ASP.NET URL 路由,那么事情就会变得复杂。

    (这原本是对 Mike 回答的评论回复,但超出了消息长度)。

    【讨论】:

    • 谢谢,不,我没有使用 url 路由。我会试一试(将 BasicTestProject 文件夹转换为应用程序)。
    • 所以在 IIS 中我右键单击 BasicTestProject 文件夹并选择“转换为应用程序”。在 cmd 中,我使用 icacls 将应用程序的权限设置为应用程序池“用户”.. 将让您发布
    • 除非您的应用程序池用户身份没有读取权限,否则无需更改任何 NTFS 权限。例如,您只需要向将要保存上传文件的目录授予写入权限。
    • 另外,请确认您的网站根目录中名为bin 的文件夹中有一个名为“BasicTestProject.dll”的文件。
    • 感谢权限的解释真的很有帮助。我让它工作了,我在网站根目录/bin 中没有 dll。这就是我打算完成的,因为我想保持根网站尽可能干净(如果可能,不要 bin 文件夹)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多