使用超出应用程序级别注册为allowDefinition ='MachineToApplication'的节时出错


192

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

我的/ portal /目录中所有aspx页面的第一行都有此错误消息,我知道这是常见的错误消息。我已经无休止地搜索了此错误消息,并且看到很多帖子告诉我将/ 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合并的方法,还是我离开这里了?

任何指导将不胜感激!


1
如果您希望/ portal /在您的主网站下是一个单独的应用程序(如果您要在其中放置web.config的话),则需要将其设置为虚拟目录。您正在使用哪个版本的IIS?通常,您可以右键单击目录,然后在“属性”下查找“目录”选项卡,然后单击应用程序名称旁边的“创建”按钮,该名称当前可能显示为灰色。要限制父级web.config文件的范围,请查看属性InheritInChildApplications =“ false”。让我知道您的IIS版本。
2012年

嗨,达世币 我使用的是IIS7,/ portal /只是我们公司的员工目录,人们可以在其中存储文档,保留日历等。我认为Benni有点总结了您的意思-在他的第二个选择中,他概述了IIS解决方案。我敢肯定,在这两种解决方案之一之间,我能弄清楚这一点。感谢您抽出宝贵的时间阅读本Dash,并为我提供帮助。一旦看到“创建”选项,我就会知道自己正在前进!再次感谢!
杰森·韦伯

1
在定义发布配置文件以在发布之前进行预编译之后,我遇到了这个问题。因此,obj文件夹带有一个web.config,该项目破坏了项目,在删除obj文件夹中的所有内容之后,它又可以工作了。
Rumplin

Answers:


219

仅用于背景信息;一个或多个Web.config文件中定义了ASP.NET网站的配置信息。配置设置以分层方式应用。有一个“全局” 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.config中

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


8
是的,本尼(Benni),绝对可以帮助解决问题-很多事情。非常感谢您抽出宝贵时间回答这个问题;仅阅读您的答案,我学到了很多东西,现在事情变得更有意义了。我认为我将尝试合并两个web.config文件-至少是身份验证部分-如果不起作用,我将研究各种IIS7选项。再次感谢您的时间和信息,本尼!
詹森·韦伯

13
当我构建Web部署程序包时,下一次构建它会导致此问题。它在MyWebSiteProject / obj / Debug / ...中具有Web.config的副本
Curtis Yallop 2013年

4
经过将近一天的努力,终于找到了一个描述性的,深入的答案,该答案实际上解释了该问题,而不是说...只是清理解决方案并进行重建。谢谢你!
Paul Jarvis博士

2
我在这里发现最大的问题是,最初的构建工作正常,但是随后的构建失败,因为顶级web.config中允许的设置在现已复制到obj文件夹的web.config中是不合法的。诀窍是在顶层删除有问题的属性,并删除obj文件夹,以将合法的web.config放入子文件夹。显然,这是Visual Studio中的错误,但是如果您不需要使用顶级web.config中子级别web.config中非法的属性,则解决方法很简单。
csells

2
在Visual Studio 2012和2013中,当配置文件的“复制到输出目录” =“始终复制”时,“发布”过程似乎会将配置文件的副本拖放到bin和obj文件夹中,然后触发此异常。由Tim C.标识的针对此发布问题的解决方案是将配置文件属性设置为“不复制”。
criticalfix

67

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


24
+1删除OBJ文件夹似乎是一个常见的解决方法... stackoverflow.com/a/5175074/188926
Dunc 2014年

1
删除OBJ文件夹的内容也为我解决了这一问题。似乎还有很多其他可能的原因导致此错误。帮助我找到正确答案的短语是“发布时”。
Jim Neff 2014年

1
如果我在OBJ文件夹上,我会尝试的。
B. Clay Shannon

在删除Debug文件夹后,设置默认的启动页面对我来说是成功的窍门(因此请确保同时执行这两项操作)。
LoJo,

尝试了一下,它没有用。然后我意识到我忘记了将发布的文件转换为IIS中的应用程序。
eaglei22

60

就像RY4N上面所说的,不一定是Project文件夹中的web.config引起了问题。在某些情况下,我发现在Debug配置文件下运行构建会在相关项目下的Debug文件夹中留下碎屑。当您随后在“发布”配置文件下运行构建时,此处通常存在一个web.config文件,该文件会导致上述错误。

在这里对我有用的解决方案是删除项目目录下先前构建的整个Debug文件夹。


1
谢谢马修;我终于在不久前找到了答案,但是是的,我必须在发行版中进行编译,而不是进行调试。感谢您抽出宝贵的时间来回应!
詹森·韦伯

3
谢谢你的提示!我刚刚删除了网站项目中的bin和obj文件夹,并且在重建时它解决了该问题。
Paul Stegler 2014年

21

这也发生在我的家用计算机上,但是仅当我在发布配置上启用“构建视图”并构建发布配置时才发生。否则就不会发生。

尽管Build Views选项非常好,但我最终将其禁用,因为此“错误”将始终弹出并让我无法运行该应用程序。


2
谢谢上帝,这似乎可以解决问题,还有其他一些建议。感谢您抽出宝贵的时间来回答!
詹森·韦伯

1
我也正在发生这种情况。不知道为什么。可以肯定的是,它使“ MvcBuildViews”设置的用处大大减少了。
肯·史密斯

有没有办法只为用户设置设置MvcBuildViews?喜欢webproject.csproj.user文件吗?
C. Tewalt 2014年

在为VS 2013安装Update 2之后,我开始出现此错误。我有一个项目,该项目具有顶层和嵌套的子网站,两者均配置为IIS应用程序。关闭MvcBuildViews也为我解决了这个问题。
Greg Enslow 2014年

13

只是说

如果您升级(例如2008-> 2010),则Visual Studio 项目将在项目解决方案中创建备份(如果允许),该备份将添加到新解决方案中。 。

该网站子文件夹之一中的Web.config文件比其中这些配置元素之一超出了应用程序级别无法定义。 ” @benni_mac_b

解决方法:在这种情况下,只需从项目和解决方案中删除备份文件夹。


谢谢您提供的信息,Ryan ....我只有VS2010。当您说从项目和解决方案中删除备份文件夹时,我不太确定您的意思。但我会进一步调查您的答案。再次感谢您抽出宝贵的时间来帮助我!我刚刚在这里发布了一个后续问题:stackoverflow.com/questions/10414751/…–
杰森·韦伯

12

我想出了发生这种情况的另一个可能原因。

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

在Visual Studio内部时,该应用程序的构建和调试就很好,但是当我尝试发布该Web应用程序时,反复出现此错误。

我终于发现问题是web.config文件的“生成操作”是“嵌入资源”而不是“内容”。另外,“复制到输出目录”设置为“始终复制”,而不是“不复制”。我不知道何时进行这些设置,但我相信它是在应用程序的2.0版本中恢复的。

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


已经尝试了所有其他解决方案。这一帮助。随着时间的推移,我的项目已从Visual Studio 2010迁移到2015,所以也许“始终复制”是2010
Andreas Rathmayr

我的web.config的属性限制为两个:FileName和FullPath; 否则,我将检查它的构建操作是什么。
B. Clay Shannon

11

我在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

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

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

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

因此,要解决:

1)将web.config更改为“请勿复制”

2)(可选)如果您使用的是配置转换,请将其设置为“始终复制”

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

4)发布

为我工作。


5

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

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

  • Build Action - None
  • Copy to Output - Always

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

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

4

我也遇到了这个问题,它是在我使用发布向导将网站发布到网络之后发生的。

经过大量挖掘之后,我在Connect网站https://connect.microsoft.com/VisualStudio/feedback/details/779737/error-allowdefinition-machinetoapplication-beyond-application-level上看到了此Bug报告。

一位MS代表答复了该问题,并解释了为什么这是发布时出现的问题,他还提供了一种临时解决方法,可以为我解决该问题。


4

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


3

Web.config解决方案资源管理器中单击文件,然后右键单击“属性”,然后更改为“复制到输出目录:请勿复制”。

在此处输入图片说明


1

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


1

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

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

我尝试了这篇博文中提到的所有内容,没有任何用处,对我来说,有效的方法是创建一个新发布的配置文件,该配置文件与我一直在使用的配置文件完全相同,并且效果很好,请不要出错使用新配置文件,但使用旧配置文件。不知道有什么区别,但是至少我可以发布我的MVC项目。

希望这对某人有帮助!!


1

这是另一个原因-如果将整个Web应用程序复制到其自己的子文件夹中,则会出现此错误。当我从一台机器复制到另一台机器时,我设法在一个旧站点上执行此操作-大约2年的时间间隔后,我被要求查看该站点并发生错误。花了很多时间弄清楚-因为我没有多个配置文件。


1

我遇到了这个问题,并通过清理旧装配等的解决方案来解决。

来自vs:构建>清洁解决方案

然后重建。



1

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

解决方案是:

  1. 您必须在子web.config中删除一些配置选项卡,例如:profileMembershiproleManagersessionState
  2. 将身份验证更改为无,方式为: <authentication mode="None" />
  3. 然后转到IIS,右键单击子文件夹- >添加应用程序。
  4. 重置IIS以解决此问题。

如果遇到其他问题,请立即联系我,也许我会找到帮助的。


1

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

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


0

确保您不会陷入通过localchost / mysite.test(应该为mysite.test)错误访问本地站点的陷阱,这将给您此错误。

在这种情况下,当您访问诸如localhost / dir_name之类的站点时,您的web.conf会落在根级别以下,因此会出现此错误。


0

我正在迁移应用程序,并且该应用程序中包含多个应用程序(多个web.configs)..我要做的是进入IIS,然后右键单击子文件夹,然后单击“转换为应用程序”,它开始工作。


0

我收到此错误的方式与其他所有人不同:

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

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

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

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


0

一切正常,localhost但是当我在服务器上发布发行版时,我在几页上启动了相同的错误。然后,我清理了解决方案,然后重新构建并发布,问题解决了。


0

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


0

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


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.