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

Jas*_*ber 182 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">
Run Code Online (Sandbox Code Playgroud)

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

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

任何指导将不胜感激!

ben*_*c_b 210

仅供参考; 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.config中

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

  • 当我构建Web部署包时,下次构建时会导致此问题.它在MyWebSiteProject/obj/Debug /中有一份Web.config副本... (11认同)
  • 是的,Benni,绝对帮助和清理了一切 - 很多事情.我非常感谢您抽出时间回答这个问题; 我只是通过阅读你的答案我学到了很多东西,现在事情变得更有意义了.我想我将尝试合并两个web.config文件 - 至少是身份验证部分 - 如果这不起作用,我将研究各种IIS7选项.再次感谢您的时间和信息,Benni! (8认同)
  • 经过将近一天的努力来解决这个问题,最后一个描述性的深入解答实际上解释了这个问题,而不是说...只是清理你的解决方案并重建.谢谢你! (4认同)
  • 我发现这里最大的问题是初始构建工作,但后续构建失败,因为顶级web.config中允许的设置在web.config中不合法,现在已复制到obj文件夹.诀窍是删除顶层的违规属性,并删除obj文件夹,以获得合法的web.config到子文件夹.显然这是Visual Studio中的一个错误,但如果您不需要在顶级web.config中使用在子级web.config中非法的属性,则解决方法是直截了当的. (2认同)
  • 在Visual Studio 2012和2013中,当配置文件具有"复制到输出目录=始终复制"时,"发布"过程似乎将配置文件的副本放入bin和obj文件夹,然后触发此异常.由Tim C.识别的此Publish问题的解决方案是将配置文件属性设置为"不复制". (2认同)

小智 60

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

  • +1删除OBJ文件夹似乎是一个常见的修复... http://stackoverflow.com/a/5175074/188926 (18认同)
  • 删除 OBJ 文件夹的内容也为我解决了这个问题。此错误似乎还有很多其他潜在原因。帮助我找到正确答案的短语是“发布时”。 (2认同)

Mat*_*own 57

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

这里适用于我的解决方案是删除在项目目录下创建的先前构建的整个Debug文件夹.

  • 谢谢你的提示!我刚删除了我的网站项目中的bin和obj文件夹,它在重建时解决了问题. (3认同)

Lor*_*pts 21

它也发生在我的家用计算机上,但只有当我在发布配置上启用构建视图并构建了一个Release配置时.否则它没有发生.

虽然构建视图选项非常好我最终禁用它,因为这个"错误"总是会弹出,让我无法运行应用程序.

  • 谢谢主...那似乎可以解决问题,还有其他一些建议.感谢您抽出宝贵时间回答! (2认同)

RY4*_*Y4N 13

只是说

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

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

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


小智 11

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

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

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

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

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


Rik*_*Rik 10

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

跑步Clean对我来说没有办法.

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

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

<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>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


ben*_*ben 7

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

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

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

所以,修复:

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

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

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

4)发布

为我工作.


nPc*_*omp 6

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

在此输入图像描述


Pat*_*bee 5

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

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

微软的一位代表回复了我,并解释了为什么这是发布时出现的问题,他还提供了一个临时解决方法来为我解决这个问题。


小智 5

我只在发布应用程序时遇到此错误.

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

  • Build Action - None
  • Copy to Output - Always.

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

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