在普通文件夹下部署ASP.NET程序的方法
问题描述:
一个asp.net的web程序(路径为d:\proj\WebTest),如果使用一个虚拟目录(例如:virtualapp)指向它(d:\proj\WebTest),通过http://localhost/virtualapp/index.aspx可以正常访问。但是如果把web程序下移到另外一个文件夹中(d:\proj\WebTest\abc), http://localhost/virtualapp/abc/index.aspx,则不能正常访问。出现以下错误提示。
“/virtualapp”应用程序中的服务器错误。
--------------------------------------------------------------------------------
配置错误
说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。
分析器错误信息: 在应用程序级别以外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。导致该错误的原因可能是在 IIS 中没有将虚拟目录作为应用程序进行配置。
源错误:
行 23: “Forms”、“Passport”和“None”
行 24: -->
行 25: <authenticationmode="Windows" />
行 26:
行 27:
源文件:E:\aspnet\WebApplicationCSharp\web.config 行: 25
如果在web.config文件把<authenticationmode="Windows" />注释掉,则又提示web程序编译之后生成的dll文件找不到(CodeFile方式)或相应的页面代码文件不能读入(CodeBehind方式)的错误。
难道asp.net程序就必须部署到虚拟目录中吗?如果是购买的服务空间,空间服务商又不放开多个虚拟目录,那在一个网站上该如何部署多个应用呢?
发生原因:
虚拟目录的实质就是“应用程序域”。应用程序在执行的时候,会到执行目录下的bin目录中去寻找执行代码。由于bin目录在d:\proj\WebTest\abc目录下,而应用程序的执行目录是d:\proj\WebTest,所以才会出现dll找不到的错误。
解决办法:
把应用的bin目录移动到应用程序的执行目录中,如果是多个web应用则需要注意dll文件的命名冲突问题。具体到该问题,就是把d:\proj\WebTest\abc目录下的bin目录复制到d:\proj\WebTest目录下,问题即可解决。