【问题标题】:Run ASP.NET Development Server "virtual path" as an application将 ASP.NET 开发服务器“虚拟路径”作为应用程序运行
【发布时间】:2010-10-05 21:46:48
【问题描述】:

我想在 ASP.NET Development WebServer (Cassini) 下使用表单身份验证运行我的新 Web 应用程序,但不在站点根目录“/”(而是在它将驻留的路径上)生产;“/新”)。

但是,构建过程给出了错误

"使用节是错误的 注册为 allowDefinition='MachineToApplication' 超出应用层。这个错误 可能是由虚拟目录引起的 未配置为应用程序 在 IIS 中。 New.MvcWeb\obj\debug\csautoparameterize\original\web.config"

现在,我明白它在说什么了。我在虚拟目录中的 web.config 中启用了表单身份验证。当我删除 web.config,或删除“虚拟路径:/New”调试器配置,或将调试从 Cassini 移至 IIS 并在“/New”处手动创建应用程序时,错误消失。

但它只是构建系统心目中的“虚拟”目录。在生产 IIS 设置中启用应用程序的路径 IS。此外,如果我删除 web.config,Cassini 会很乐意将“http://localhost/New”作为应用程序发布(例如,Server.MapPath("~") 返回我的项目目录,不带“/New”后缀) ;但是我需要在其中启用表单身份验证(应用程序级别的 web.config 参数)。

如何在保留所需功能的同时避免此构建错误?

更多详情

该项目当前配置为“文件系统”站点开发。这和 Cassini 应该让我的内容创建者更容易使用他们的 VS2010 本地副本参与开发和测试,而无需在他们的 Windows PC 上安装 IIS。我也会一键发布到本地IIS进行测试,然后打包/发布/部署到公开测试,最后发布到生产环境。在我看来,我认为 Cassini 是整个过程中非常有用的一部分。

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>

【问题讨论】:

    标签: asp.net visual-studio-2010 virtual-directory cassini


    【解决方案1】:

    我通常认为应用程序永远不应该关心它们是作为 root 运行还是在 sub-uri 中运行。我还要说,在 2010 年,随着IIS Express 的到来,投入任何时间或心痛与卡西尼作战是没有意义的。这应该会更好地支持您的要求。

    编辑了解更多详情

    关于 IIS express 的有趣更新。我们为我们的设计类型做一些相同的事情——我们宁愿他们实现设计而不是程序员浪费他们的生活时间来追求单个像素。我们发现将设计师的机器基本上视为持续集成构建代理是最容易的。他们运行 IIS 并使用与 CI 框相同的命令行构建脚本进行构建。效果出奇的好。在这两种情况下,您都有一台无法自理的机器,因此所有内容都需要编写脚本。 IIS 位通常设置一次,因为我们保持它非常简单,并且很少需要对现代版本的 .NET 进行调整。希望这会有所帮助。

    【讨论】:

    • 谢谢怀亚特。我同意,应用程序本身不应该关心它是在 root 还是“/New”。但是它具有来自根的原始非 MVC 站点的链接,并且站点外链接非常关心相对路径是什么。我们不能将整个站点快速迁移到 MVC。我(更重要的是我的贡献者)需要同时运行这两个站点以进行测试、演示和生产。
    • 明白了,这很有意义。有很多应用程序以这种方式运行,我们通常让它们在 IIS 上运行,就像你在做演示一样,你不应该需要 VS 开发环境。
    • 感谢 Wyatt 对 IIS Express 的引用。我完全同意,它预测解决了我今天遇到的这些相关问题 - 了解如何在内容创建者工作站上配置/管理 IIS,需要管理员权限才能启动 Visual Studio 项目,公司 IS 员工不允许 IIS,等等。可惜 IIS Express 是其中的一部分WebMatrix 的,处于测试阶段,直到“今年晚些时候”才可用,并且在以下主要 VS SP 版本之前不会集成到 VS 调试中。
    • PS 你的信息把我带到了这里,这就是我在 IIS Express 上得到悲伤预测的地方。 channel9.msdn.com/blogs/glucose/…
    • 是的,感谢 Wyatt 的更新。我可能不得不求助于将 IIS 放在设计师的盒子上并让他们获得管理员登录名,这两者都需要额外的系统管理员支持。我还必须弄清楚如何让 IIS 维护发生,你提到的来自脚本。不幸的是,我们是一家小商店,所以任何像这样的魔法都必须来自我。这让我回到了希望 MS 产品能够按照我(可能还有其他人)想要的方式开箱即用......
    【解决方案2】:

    因此,了解到 Cassini 实际上确实将路径作为应用程序运行 [即Server.MapPath("~") 返回project根目录,Server.MapPath("/") 可能不存在],严格来说真的变成了构建错误。

    有了更好的问题定义,我现在看到其他人在使用 MvcBuildViews 和 One-Click-Publish 的 MVC 项目中也有这个错误。以下是一些关于如何避免它的文章:

    allowDefinition='MachineToApplication' error when publishing from VS2010 (but only after a previous build)

    http://connect.microsoft.com/VisualStudio/feedback/details/556312/mvcbuildviews-does-not-play-well-with-one-click-publish

    【讨论】:

    • 我已经验证我可以通过清理解决方案来解决问题(在打包之后但在下一次构建之前)。起初这很令人困惑,因为我试图清理另一个进程正在使用的包文件夹。当然,这仍然是一个 VS 缺陷,但我现在锁定了根本原因,并且承认了该缺陷,所以我很高兴......
    • 我的错,我经常要手动从obj文件夹中清除文件,清理不清理packageTmp。
    • 必须删除的是:{$Project}\obj\{$Config}\CSAutoParameterize 目录
    猜你喜欢
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 2010-09-23
    • 2012-05-23
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2016-10-23
    相关资源
    最近更新 更多