3

我在做什么应该很简单。在 IIS6 中,我可以转到网站上的属性并从中创建/删除应用程序状态。但是,我终其一生都无法弄清楚如何将网站本身(不是其下的虚拟目录)转换为应用程序!

最终,我的问题在于使用 Visual Studio 2010 的发布功能,因为它给了我这个错误:It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.我假设这是因为网站未配置为应用程序。

如果我在我的网站下创建一个虚拟目录并将其推广到应用程序(通过右键单击它并选择Convert to Application),那么一切都很好。但我根本无法弄清楚如何对网站本身执行此操作,我需要这样做,因为我需要这个 MVC2 站点托管在www.domain.com/而不是www.domain.com/appname/. 我对这一切都错了吗?我是在错误地使用 VS2010 还是在 IIS 中缺少一个选项?

4

1 回答 1

2

我已经解决了我的问题。事实证明,这个问题与 IIS 及其配置或类似的东西无关,而是 VS2010 发布 Web 应用程序的方式的副产品。

因此,正如我们大多数人所做的那样,我们并没有真正在 Cassini 下调试应用程序——相反,我们使用指向我们不断更改的源代码的 IIS。好吧,使用发布功能的默认设置,VS2010 所做的是编译应用程序(和依赖项)并将适当的文件复制到项目根位置内名为“obj”的特殊子目录下的文件夹中。将要尝试部署的 Web 应用程序的“副本”中包含待部署的 web.config 文件。此配置文件包含应位于应用程序根目录中的 web.config 文件中的内容。但请记住,我们的源代码位于 IIS 应用程序中。因此,一旦生成此文件(在我们编译/构建版本之后),

因此,只要 VS 成功发布应用程序并删除该临时副本,这一切都很好。唯一的问题是 VS 不会删除该临时副本(in ~/obj/Release/Package/PackageTmp),无论它是否成功。因此,一旦您尝试发布一次,如果没有此错误提示 IIS 配置中的问题,您将无法成功编译您的应用程序,并且此错误将阻止将来的发布。

所以我的解决方法是在发布后删除 obj 文件夹。其他功能解决方法包括将其设置为调试 IIS 应用程序目录路径之外的文件夹(对源代码控制系统有好处)或为 obj 文件夹下的调试/发布副本添加 IIS 应用程序(有其他潜在好处)。总而言之,这是一个非常令人困惑的问题,需要一些非常简单的解决方法。

于 2010-05-26T18:11:46.727 回答