在应用程序级别之外使用注册为allowDefinition ='MachineToApplication'的部分时出错

时间:2012-02-15 20:36:42

标签: asp.net web-config

  

在应用程序级别之外使用注册为allowDefinition ='MachineToApplication'的部分是错误的。

我的/ portal /目录中所有aspx页面的顶行都有此错误消息,我知道这是一个常见的错误消息。我已经用Google搜索了这个错误信息,我看到很多帖子告诉我将/ portal /文件夹配置为IIS中的应用程序(我有),还有更多帖子告诉我我已经嵌套了web.configs(但是没有任何帖子为解决方案提供指导。)

我的设置是我的根目录中有一个web.config,然后我正在尝试在/ portal /目录中创建一个公司门户。 / portal /目录有自己的(必要的)web.config。

我的web.config第50行是这样的:

    <customErrors mode="Off" defaultRedirect="customerrorpage.aspx"/>
    <anonymousIdentification enabled="true"/>
    <authentication mode="Forms"/>
    <membership defaultProvider="MyProvider">

所以我有domain.com/web.config和domain.com/portal/web.config ...所以我的domain.com/portal/default.aspx页面将无法加载。

这是什么真正的解决方案?我是否以某种方式找到了将我的根web.config与我的/ portal /目录web.config合并的方法,还是我离开这里了?

非常感谢任何指导!

28 个答案:

答案 0 :(得分:200)

仅供参考; ASP.NET网站的配置信息在一个或多个Web.config文件中定义。配置设置以分层方式应用。有一个“全局”Web.config文件,它说明了Web服务器上所有网站的基线配置信息;此文件位于%WINDIR%\Microsoft.Net\Framework\version\CONFIG文件夹中。您还可以在网站的根文件夹中包含Web.config文件。此Web.config文件可以覆盖“全局”Web.config文件中定义的设置,或添加新文件。此外,您可以在网站的子文件夹中包含Web.config文件,这些文件定义新的配置设置或覆盖在层次结构中较高的Web.config文件中定义的配置设置。

Web.config中的某些配置元素无法在应用程序级别之外定义,这意味着它们必须在“全局”Web.config文件或网站根文件夹中的Web.config文件中定义。 <authentication>元素就是这样一个例子。上面的错误消息表明在其中一个网站的子文件夹中有一个Web.config文件,其中一个配置元素无法在应用程序级别之外定义。

来源:http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx

您已正确识别出两种可能的方法。

1 - 取决于您的第二个web.config的内容以及您的设置是否允许(即相同的身份验证方法) - 将<authentication>设置和应该全局定义的任何其他元素添加到顶级Web中。配置

2 - 如果您无法合并web.config内容,那么您应该可以按照以下链接存档链接中包含的步骤将子文件夹转换为IIS中的Web应用程序。原始链接不再有效。 (见archived) 希望这会有所帮助。

答案 1 :(得分:58)

对于它的价值,我收到了错误,“在应用程序级别之外使用注册为allowDefinition ='MachineToApplication'的部分是错误的。”并最终通过清除\ myWebApp \ _ obj \ Debug和\ myWebApp \ _ obj \ Release目录来解析它。我还需要设置默认启动页面。但是,然后应用程序启动正常。 HTH。

答案 2 :(得分:57)

正如上面提到的RY4N,它不一定是Project文件夹中的web.config导致问题。在某些情况下,我发现在Debug配置文件下运行构建会在相关项目下的Debug文件夹中留下碎片。这里经常有一个web.config文件,当您随后在Release配置文件下运行构建时,会导致上述错误。

这里适合我的解决方案是删除在项目目录下创建的先前版本的整个Debug文件夹。

答案 3 :(得分:21)

它也发生在我的家用电脑上,但只有当我在发布配置上启用构建视图并构建了发布配置时。否则就不会发生。

虽然Build Views选项非常好,但我最终禁用了它,因为这个“错误”会一直弹出,让我无法运行应用程序。

答案 4 :(得分:12)

只是说

如果您升级(例如2008 - &gt; 2010)项目 Visual Studio将在项目解决方案中创建备份(如果您允许),该解决方案已添加到新的解决方案,旧的Webconfig可以从上面指出的错误发出。

Web.config文件位于其中一个网站的子文件夹中,而不是其中一个配置元素无法在应用程序级别之外定义。”@ benni_mac_b

要解决此问题:在此方案中,只需从项目和解决方案中删除备份文件夹。

答案 5 :(得分:11)

我想出了另一个可能的原因。

我有一个内置于2.0的旧版Web应用程序。我将其迁移到4.5解决方案。

在Visual Studio内部构建和调试应用程序时很好,但是当我尝试发布Web应用程序时,这个错误一再发生。

我终于发现问题是web.config文件的Build Action是&#34; Embedded Resource&#34;而不是&#34;内容&#34;。此外,复制到输出目录设置为&#34;始终复制&#34;而不是&#34;不要复制&#34;。我不知道这些设置什么时候开始,但我相信它已经回到2.0版本的应用程序中了。

修改web.config文件的设置允许Visual Studio 2012发布中的“发布”操作完美运行。

答案 6 :(得分:10)

我在MVC项目中遇到了同样的问题。我尝试发布时发生错误。原来obj文件夹应该是空的(或者至少不包含任何web.config)。

正在运行Clean并没有为我做到这一点。

我通过在任何构建之前清理obj文件夹解决了这个问题(在我的情况下,项目的构建不会花那么长时间)。

我卸载了项目,并将以下内容添加到BeforeBuild Target

<Target Name="BeforeBuild">
    <Delete Files="$(SolutionDir)\$(ProjectDir)\bin\**\*.*" />
    <Delete Files="$(SolutionDir)\$(ProjectDir)\obj\**\*.*" />
    <RemoveDir Directories="$(SolutionDir)\$(ProjectDir)\bin" />
    <RemoveDir Directories="$(SolutionDir)\$(ProjectDir)\obj" />
    <Message Text="Clean obj/bin from web project" />
</Target>

希望这有帮助

答案 7 :(得分:6)

“使用在应用程序级别之外注册为allowDefinition ='MachineToApplication'的部分是错误的。此错误可能是由于虚拟目录未在IIS中配置为应用程序而引起的。”

我在VS.NET中遇到过这个问题。事实证明,当我配置一些配置转换时,我错误地设置了Web.config文件的属性“Copy always”。我通常将转换文件设置为“始终复制”,但将web.config根文件保留为“不要复制”。

注意,因为更改web.config的属性也会更改所有嵌套转换。

所以,修复:

1)将web.config更改为“不要复制”

2)(可选)如果您正在使用配置转换,请将它们设置为“始终复制”

3)从解决方案中删除obj和bin文件夹(这些文件夹可能不可见,因此请在解决方案资源管理器中选择项目节点,然后单击“显示所有文件”工具栏按钮。

4)发布

为我工作。

答案 8 :(得分:5)

我仅在发布应用程序时遇到此错误。

web.config(和转换)文件的属性设置为:

  • Build Action - None
  • Copy to Output - Always

解决方案是将设置更改为:

  • Build Action - Content
  • Copy to Output - Do not Copy

答案 9 :(得分:4)

我也遇到过这个问题,之后我使用发布向导将我的网站发布到网上。

经过大量挖掘后,我在Connect网站https://connect.microsoft.com/VisualStudio/feedback/details/779737/error-allowdefinition-machinetoapplication-beyond-application-level

上看到了这个Bug报告

MS代表回复并解释了为什么这是发布时出现的问题,他还包括一个为我解决问题的临时解决方法。

答案 10 :(得分:4)

再次

删除创建虚拟目录。 右键单击并将虚拟目录转换为“应用程序

答案 11 :(得分:2)

单击解决方案资源管理器中的Web.config文件并更改

复制到输出目录=不复制

答案 12 :(得分:1)

Windows开始 - &gt;开放网站 - &gt; IIS - &gt;右键点击您的网站 - &gt;管理网站 - &gt;高级设置 - &gt;浏览物理路径 - &gt;尝试选择当前选择的子文件夹。

逻辑是子文件夹中的Web配置文件正在尝试进行更改,这是不允许的,必须是选定的文件夹:http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx

答案 13 :(得分:1)

我有这个问题,并通过清理我的旧程序集等解决方案来解决。

来自vs: 构建&gt;清洁解决方案

然后重建。

答案 14 :(得分:1)

这是另一个原因 - 如果您将整个Web应用程序复制到其自己的子文件夹中,您将收到此错误。当我从一台机器复制到另一台机器时,我设法将它做到了一个旧站点 - 只是被要求在大约2年的差距后查看该站点并且发生了错误。花了很多时间搞清楚 - 因为我没有多个配置文件。

答案 15 :(得分:1)

我在发布网站时遇到了同样的问题,如果我构建网站我没有遇到任何问题,但在发布时我会收到这个可怕的错误:

  

&#34;使用注册为的部分是错误的   allowDefinition的=&#39; MachineToApplication&#39;超出应用水平。这个   虚拟目录未配置为错误可能导致错误   IIS中的应用程序&#34;

我尝试过这篇文章中所说的所有内容都没有诉诸,对我来说有用的只是创建一个新的发布配置文件,与我一直使用的完全相同,并且运行良好,不要#39; t使用新配置文件获取错误但使用旧配置文件。不确定区别是什么,但至少我可以发布我的MVC项目。

希望这有助于某人!!

答案 16 :(得分:1)

对我来说,原因是obj文件夹位于网站文件夹下,并且在构建不同的配置后出现了多个web.config。我通过将obj文件夹从网站上移出来解决了vs2012下的问题。要做到这一点,我添加了manualy(在记事本中)$(SolutionDir)\ Obj \ $(配置) 到网站项目文件中的每个配置。

答案 17 :(得分:0)

确保你不要&#39;陷入访问本地网站错误的localchost / mysite.test应该是mysite.test ,这会给你这个错误。

当您像localhost / dir_name一样访问您的站点时,在这种情况下,您的web.conf低于根级别,因此会出现此错误。

答案 18 :(得分:0)

我正在迁移应用程序,应用程序中有多个应用程序(多个web.configs)..我所做的是进入IIS然后右键单击子文件夹然后转换为应用程序&#34;它起作用了。

答案 19 :(得分:0)

我得到的错误与其他人不一样:

我正在从带有Web部署项目的vs2010迁移到vs2012和新的Web发布配置文件。

我在vs2012中创建了一个新的Web发布项目以发布到文件系统(我们有一个单独的安装程序构建器,这是一个商业应用程序),我发布到一个文件夹,该文件夹位于链接到IIS的现有Web项目中。

这导致了发布期间的错误,最初让我感到困惑,因为我发布的是文件系统,而不是IIS(我想)。

解决方案是将发布到文件夹更改为Web项目之外。

答案 20 :(得分:0)

尝试在网站中部署子网站时,我也遇到此错误。

解决方案是:

  1. 您必须在子网中删除一些配置标签,例如:个人资料会员 roleManager 会话状态的.config
  2. 将身份验证更改为无:<authentication mode="None" />
  3. 右键单击子文件夹 - &gt;进入IIS添加应用程序。
  4. 重置IIS以解决此问题。
  5. 如果得到其他问题,请不要犹豫我,也许我会帮忙。

答案 21 :(得分:0)

localhost上没问题,但是当我在服务器上发布一个版本时,我在几页上启动了相同的错误。 然后我清理了解决方案并重建了&amp;发表,事情得到了解决。

答案 22 :(得分:0)

有时,简单的答案是最好的。我的项目中有两个web.config文件。在主要级别的那个是我需要进行更改以处理我的会话超时(这触发了这个问题)。我的Razor Views目录中有一个单独的配置文件,它有Razor及其视图的设置。我在那里添加了一个部分(不是在应用程序级别!)。没有意识到我有两个单独的web.config文件,我尝试了一切,除了寻找明显的。

答案 23 :(得分:0)

我的错误是无意中将web.config复制粘贴到Web服务器上的另一个文件夹中

答案 24 :(得分:0)

我在Visual Studio 2017中的localhost上收到此错误,并且重新启动Visual Studio即可解决此问题。

我知道这个问题也可能是由多个web.config引起的;例如在一个子文件夹中。如果您确实有多个web.config文件专门用于另一个应用程序:请确保该目录未被视为虚拟目录。

答案 25 :(得分:0)

当我忘记将发布的项目转换为IIS中的应用程序时,出现了此错误。

答案 26 :(得分:0)

如果单击错误,请检查打开的web.config的路径。某些node_modules(node_module \ selenium_webdriver \ lib \ test \ data \ web.config)也可以具有web.config文件。

答案 27 :(得分:0)

直接删除 obj 和 bin 并立即修复该问题。