我想在ASP.NET开发WebServer(Cassini)下使用表单身份验证运行我的新 Web应用程序,但不是在站点根目录“/”(而是在它将驻留在的路径中)生产;“/新”)。
但是,构建过程会出错:
“使用部分是错误的 注册为 allowDefinition的= 'MachineToApplication' 超出应用水平。这个错误 可以由虚拟目录引起 未配置为应用程序 在IIS中。 New.MvcWeb \ OBJ \调试\ csautoparameterize \原始\的web.config“
现在,我理解它的含义。我在虚拟目录中的web.config中启用了表单身份验证。删除web.config或删除“虚拟路径:/新”调试器配置,或将调试从Cassini移至IIS并在“/ New”处手动创建应用程序时,错误消失。
但它只是构建系统头脑中的“虚拟”目录。在生产IIS设置中启用了 IS 应用程序的路径。此外,如果我删除web.config,Cassini将很乐意发布“http:// localhost / New”作为应用程序(例如,Server.MapPath(“〜”)返回我的项目目录而没有“/ New”后缀) ;但是我需要在其中启用表单身份验证(应用程序级web.config参数)。
如何在保留所需功能的同时避免此构建错误?
该项目目前已配置为“文件系统”站点开发。这和Cassini应该让我的内容创建者更容易使用他们的本地VS2010副本参与开发和测试,而无需在他们的Windows PC上安装IIS。我还将一键发布到我的本地IIS进行测试,然后打包/发布/部署到公共测试,最后发布到生产。在我看来,我想卡西尼是整个过程中非常有用的一部分。
VS2010, MVC application, file-system site project
Project Settings:
* ASP.NET 4.0
* Use Visual Studio Development Server
* Virtual Path: /New
web.config snippet:
<authentication mode="Forms">
<forms loginUrl="~/../login.html" timeout="30"/>
</authentication>
答案 0 :(得分:1)
我一般认为应用程序永远不应该关心它们是以root用户身份还是以子uri身份运行。我还要说,在2010年,随着IIS Express的到来,在任何时候投入任何时间都没有任何意义,也没有心理对抗卡西尼。这应该会更好地支持您的要求。
编辑更详细信息
有关IIS express的有趣更新。我们为我们的设计类型做了一些相同的事情 - 我们宁愿他们实现设计,而不是程序员在追求个别像素时损失数小时。我们发现将设计人员的机器基本上视为基本上持续的集成构建代理是最容易的。它们运行IIS并使用CI框所使用的相同命令行构建脚本进行构建。工作得非常好。在这两种情况下,您都拥有一台无法自理的机器,因此所有内容都需要编写脚本。 IIS位通常会被设置一次,因为我们保持它非常简单,并且很少需要使用现代版本的.NET进行调整。希望这会有所帮助。
答案 1 :(得分:0)
因此,了解到卡西尼确实将路径作为应用程序运行[即Server.MapPath(“〜”)返回项目根文件夹,Server.MapPath(“/”)可能不存在],它确实严格地构成了构建错误。
有了更好的问题定义,我现在看到其他人在使用MvcBuildViews和One-Click-Publish的MVC项目中也有这个错误。以下是一些关于如何避免它的文章: