我所做的应该很简单。在 IIS6 中,我可以直接转到网站上的属性并从中创建/删除应用程序状态。但是,我一辈子都想不出如何将网站本身(而不是其下的虚拟目录)转换为应用程序!
最终,我的问题是使用 Visual Studio 2010 的发布功能,因为它给我这个错误:在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的部分是错误的。此错误可能是由于 IIS 中未将虚拟目录配置为应用程序引起的。
我假设这是因为网站未配置为应用程序。
如果我在我的网站下创建一个虚拟目录并将其提升为一个应用程序(通过右键单击它并选择 Convert to Application
),那么一切都很好。但我根本无法弄清楚如何对网站本身执行此操作,我需要这样做,因为我需要托管在 www.domain.com/
而不是 www.domain 的 MVC2 网站.com/应用程序名称/
。我这样做是不是错了?我是否错误地使用了 VS2010,或者我是否缺少 IIS 中的选项?
最佳答案
我已经解决了我的问题。事实证明,该问题与 IIS 及其配置或类似问题无关,而是 VS2010 发布 Web 应用程序的方式的副产品。
因此,正如我们大多数人所做的那样,我们并没有真正调试 Cassini 下的应用程序 - 而是使用指向我们不断更改的源代码的 IIS。那么,使用发布功能的默认设置,VS2010 所做的是编译应用程序(和依赖项)并将适当的文件复制到项目根位置内名为“obj”的特殊子目录下的文件夹中。将要尝试部署的 Web 应用程序“副本”中包含待部署的 web.config 文件。此配置文件包含应包含在应用程序根目录中的 web.config 文件中的内容。但请记住,我们的源代码位于 IIS 应用程序中。因此,一旦生成此文件(在我们编译/构建发布之后),我们现在就违反了开发/构建机器上的 IIS 要求。
因此,只要 VS 成功发布应用并删除该临时副本,一切都很好。唯一的问题是 VS 不会删除该临时副本(在 ~/obj/Release/Package/PackageTmp
中),无论它是否成功。因此,一旦您尝试发布一次,您就无法成功编译您的应用程序,除非此错误提示 IIS 配置存在问题,并且此错误将阻止 future 的发布。
所以我的解决方法是在发布后删除 obj 文件夹。其他功能性解决方法包括将此设置为调试 IIS 应用程序目录路径之外的文件夹(对源代码控制系统有好处)或为 obj 文件夹下的调试/发布副本添加 IIS 应用程序(有其他潜在好处)。总而言之,这是一个非常令人困惑的问题,有一些非常简单的解决方法。
关于iis - 使IIS7.5网站成为一个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2914509/