allowDefinition ='MachineToApplication'msbuild错误

jas*_*ard 45 msbuild web-config

我们有一个带有4-5种不同构建配置的ASP.NET MVC.每当我们更改构建配置时,我们都需要删除web项目的obj文件夹,因为我们得到'allowDefinition ='MachineToApplication'错误.一个痛苦,但我们通过删除前/后构建事件中的文件夹来管理.现在我需要配置我们的CI来构建部署包.这意味着我无法删除obj文件夹.每次我使用以下msbuild参数编译时

/ p:CreatePackageOnPublish = true/p:DeployOnBuild = true

我收到错误:

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

据我所知,问题是项目中有多个.config文件 - 在我们的例子中,没有.我真的可以使用一些帮助找到解释并找到一个永久性(无法修复).

编辑:此问题被标记为重复,但2个主题中的相应答案和原因明显不同.不确定这个标签的用途是什么 - 我在发布这个问题之前已经阅读过该特定帖子,因为它没有回答我的问题.导致此错误消息的原因有多种.它是"相似的",但绝对不是重复的!

Mar*_*len 23

这里有一个类似的问题,为这个问题提供了一些很好的解决方案.

问题是构建部署包会在/ obj的子文件夹中创建web.config的副本.如果你进行重建或清理,通常会被清除.但是,如果您在一个配置(例如Debug)中构建部署包,然后切换到另一个配置(例如Release),则不会清除obj/Debug文件夹,并且web.config文件会导致问题.

快速解决方案是清理所有配置,然后进行(重新)构建.或者,您可以删除项目中的/ obj文件夹.要永久解决问题,您可以将中间输出(/ obj)移出项目文件夹,也可以修改项目以强制清除重建时的所有配置.


Val*_*mas 21

我也删除了obj文件夹,直到我与需要它的构建脚本发生冲突.Catch-22,我在下面的SO链接上使用了接受的答案来移动Obj文件夹的位置C:\Temp\BUILD.你必须按照csproj文件来做,但这是一个很好的解决方案.

这是链接:VisualStudio:如何在其他地方保存obj文件夹

请注意,我正在为项目名称使用变量.R:\ TEMP \编译\调试\ $(MSBuildProjectName)

我在所有项目的调试和发布部分都有上述内容,包括类项目.我的构建路径是速度的ram驱动器.有关更多信息,请参阅此SO:如何访问csproj文件中的宏变量?

  • 谢谢你的链接.我的问题的确切原因是我的web.config包含一个`<authorization>`部分,并且在构建期间将web.config复制到`obj\Release\Package\PackageTmp`.发布者以某种方式将web.config识别为子目录web.config,并抱怨`<authorization>`是在不在应用程序目录中的web.config中定义的. (4认同)

arc*_*ain 12

我刚才在这里回答了类似的问题.回顾一下,我在一个MVC项目中遇到了这个问题,这是因为MvcBuildViews项目文件中的属性设置为true.设置属性以false解决问题.

<MvcBuildViews>false</MvcBuildViews>
Run Code Online (Sandbox Code Playgroud)

我还发现这个答案概述了一个不需要关闭视图构建的替代方案.