我正在做的事情应该很简单。在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
),那么一切都很好。但我根本无法弄清楚如何对网站本身这样做,我需要这样做,因为我需要在www.domain.com/
而不是www.domain.com/appname/
托管这个MVC2网站。我错了吗?我是否错误地使用VS2010或者我在IIS中缺少选项?
答案 0 :(得分:2)
我已经解决了我的问题。事实证明,问题与IIS及其配置或类似的东西无关,而是VS2010发布网络应用程序的方式的副产品。
因此,正如我们大多数人所做的那样,我们并没有真正调试Cassini下的应用程序 - 相反,我们使用指向我们不断变化的源代码的IIS。好吧,使用发布功能的默认设置,VS2010的功能是编译应用程序(和依赖项),并将相应的文件复制到项目根位置内名为“obj”的特殊子目录下的文件夹中。其将要尝试部署的Web应用程序的“副本”中包含要部署的web.config文件。此配置文件包含应该位于应用程序根目录中的web.config文件中的内容。但请记住,我们的源代码位于IIS应用程序中。因此,一旦生成此文件(在我们编译/构建版本之后),我们现在违反了我们的开发/构建机器上的IIS要求。
只要VS成功发布应用程序并删除该临时副本,这一切都很好。唯一的问题是VS不会删除该临时副本(在~/obj/Release/Package/PackageTmp
中)是否成功。因此,一旦您尝试发布一次,就无法成功编译您的应用程序,而不会出现此错误,暗示IIS配置中存在问题,此错误将阻止将来发布。
所以我的解决方法就是在发布后删除obj文件夹。其他功能性解决方法包括将其设置为调试IIS应用程序目录路径之外的文件夹(对源控制系统有益)或在obj文件夹下为调试/发布副本添加IIS应用程序(具有其他潜在好处)。总而言之,这是一个非常混乱的问题,有一些非常简单的解决方法。