2010-05-26 40 views
3

我正在做的事情应该很简单。在IIS6中,我可以转到网站上的“属性”并从中创建/删除应用程序状态。然而,我不能在我的生活中弄清楚如何将网站本身(不是它下面的虚拟目录)转换成应用程序!使IIS7.5网站成为应用程序

最终,我的问题是使用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),那么一切都很好。但我根本无法弄清楚如何做到这一点网站本身,我需要这样做,因为我需要这个托管在www.domain.com/而不是www.domain.com/appname/的MVC2网站。我是否全部错了?我是否正确使用VS2010或者我在IIS中缺少一个选项?

回答

2

我解决了我的问题。事实证明,这个问题与IIS及其配置或类似的东西没有任何关系,而是VS2010发布Web应用的方式的一个副产品。

因此,就像我们大多数人所做的那样,我们并不真正调试Cassini下的应用程序 - 而是使用指向我们源代码的IIS,我们不断地改变。那么,借助发布功能的默认设置,VS2010所做的就是编译应用程序(和依赖关系),并将相应的文件复制到项目根目录中名为“obj”的特殊子目录下的文件夹中。包含在将要尝试部署的Web应用程序的此“副本”中的是要部署的web.config文件。这个配置文件包含了应用程序根目录中的web.config文件。但请记住,我们的源代码位于IIS应用程序内部。所以一旦生成这个文件(在我们编译/构建发布之后),我们现在违反了我们开发/构建机器上的IIS要求。

所以,只要VS成功发布应用程序并删除临时副本,这一切都很好。唯一的问题是,VS不会删除该临时副本(在~/obj/Release/Package/PackageTmp中)是否成功。所以一旦你尝试发布一次,如果没有这个错误,你就无法成功地编译你的应用程序,暗示IIS配置存在问题,这个错误将会阻止将来的发布。

所以我的解决方法是在发布后只删除obj文件夹。其他功能解决方案包括将其设置为调试IIS应用程序目录路径之外的文件夹(具有源代码管理系统的优点)或为obj文件夹下的调试/发行版副本添加IIS应用程序(具有其他潜在优势)。总而言之,这是一个非常混乱的问题,有一些非常简单的解决方法。

相关问题