allowDefinition ='MachineToApplication'msbuild错误

我们有一个ASP.NET MVC 4-5个不同的构buildconfiguration。 无论何时我们更改构buildconfiguration,我们都需要删除Web项目的obj文件夹,因为我们得到'allowDefinition ='MachineToApplication'错误。 一个痛苦,但我们通过删除前/后生成事件中的文件夹pipe理。 现在我需要configuration我们的CI来构build部署包。 这意味着我不能删除obj文件夹。 每次我编译例如下面的msbuild参数

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

我收到错误:

web.config(123):错误ASPCONFIG:在应用程序级别之外使用注册为allowDefinition ='MachineToApplication'的节是错误的。 此错误可能是由于虚拟目录未被configuration为IIS中的应用程序。

据我了解,问题是在项目中有多个.config文件 – 在我们的情况下,没有。 我真的可以用一些帮助来find一个解释,并find一个永久性的(没有黑客)修复。

编辑:这个问题被标记为重复,但在2个线程中相应的答案和原因,是明显不同的。 不知道这个标签有什么意图 – 在发布这个问题之前,我已经阅读了这篇文章,因为它没有回答我的问题。 这个错误信息有多种原因。 这是“相似的”,但绝对不是重复的!

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

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

请注意,我正在使用项目名称的variables。 R:\ TEMP \编译\debugging\ $(MSBuildProjectName)

我有我的所有项目,包括类项目的debugging和发布部分的上述行。 我的build设path是速度的公羊驱动器。 看到这样的更多信息: 如何访问csproj文件内的macrosvariables?

对于这个问题,在这里也有类似的问题 ,有一些很好的解决scheme。

问题是构build部署包在/ obj的子文件夹中创buildweb.config的副本。 这通常会被清除,如果你做一个重build或清洁。 但是,如果您在一个configuration(例如Debug)中构build部署包,然后切换到另一个configuration(例如Release),obj / Debug文件夹不会被清除,并且web.config文件会导致问题。

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

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

 <MvcBuildViews>false</MvcBuildViews> 

我也发现这个答案 ,概述了一个替代scheme,不需要closures视图build设。

我不知道有一个“官方”的修复,因为它似乎开始在我的多个项目,我没有任何理由,我可以find在Visual Studio高级2012年(以前没有发生过的VS版本)。

作为一个解决scheme,自动删除obj目录,就像其他人所说的,类似于用户的答案在这个职位上休闲VisualStudio:如何保存在其他地方的obj文件夹 ,不幸的是只是移动obj文件夹的位置didn'总是似乎工作。

相反,我在预生成事件命令行中的“生成事件”下添加了一些命令:

 rd "$(ProjectDir)obj" /S /Q md "$(ProjectDir)obj" md "$(ProjectDir)obj\Debug" md "$(ProjectDir)obj\Release" 

您可以使用buildConfigName与您所使用的构buildconfiguration的名称相匹配的行来更改/添加/删除子文件夹以匹配您的自定义构buildconfiguration:

 md "$(ProjectDir)obj\buildConfigName" 

希望这可以帮助!

该错误表明您正在尝试某种特定于未定义为应用程序的IIS树级别的应用程序。 例如,如果您尝试在虚拟目录的web.config中执行应用程序级别的function,则会出现该错误。 您需要find要部署到的path,并确保它在IIS中定义为应用程序vs文件夹或vdir。

清理解决scheme(右键单击VS中的解决scheme,清理),为我工作。

我有同样的错误,但与部署页面..然后意识到我的networking服务器的时钟已设置为2010年出于某种原因。 将其设置为正确的date修复我的问题

这不一定是完全相同的问题,说实话,可能是纯粹的知识缺乏,但我也有同样的错误:

  1. 我build立了一个标准的asp.net新项目实际上只用于HTML5的东西,所以没有比通常的项目结构
  2. 然后,我(也许没有想到!)添加了一个新的WCF REST项目(实际上这只是另一个基本的asp.net项目,使用了很好的例子:http://www.codeproject.com/Articles/128478/Consuming-WCF-REST-使用jQuery AJAX调用fid = 1597004&df = 90&mpp = 25&noise = 3&prof = False&sort = Position&view = Quick&fr = 26#xx0xx and http://geekswithblogs.net/michelotti/archive/2010/08/21/restful- WCF服务与-无SVC-文件和无config.aspx

问题是我添加了WCF REST项目(#2)作为主项目(#1)的子目录,然后尝试构build! 即使我清理了当然的项目..我也使这两个项目使用IISexpress,因为我认为有一个问题使用相同的端口或东西。

当然,构build过程从#1看到了web.config,然后是另一个web.config#2的子目录。

我意识到这可能应该是一个非常基本的理解gotcha ,它已经抓到我不久前,但有时它是最简单的错误是一个真正的痛苦!

可能帮助别人…谁也许没有早上喝咖啡

技巧1:清洁,然后重build。

提示2:closuresVS再次打开。

提示3:下载的项目可能在另一个子文件夹内…打开有.net文件的文件夹。

c:/ demo1 / demo /(所有文件)

你应该打开演示从VS …不demo1。

清理项目删除/ obj文件夹(可能使用发布和部署? – 有一个错误)

我有一个类似的问题,我的主要configuration为复制总是,所以它复制configuration到bin目录。 当我重新发布主项目,我得到了MachineToApplication错误。 所以我的解决scheme是只要将configuration更改为不要复制,并删除bin文件夹中的额外configuration。

虽然这个问题在被接受的答案中以一种方式解释和解决,但是我想表明一个解决scheme对于其他情况可能更好。 这个解决scheme已经包含在VS的某些版本中,但是我只能说我在VS 2013 Update 5中遇到了问题。(请参阅下面的“当心” ,它可以在此版本中修复,但不能在我的特定案件)。

我在Visual Studio Connect的应用程序级别之外借用了Error:allowDefinition ='MachineToApplication'中的soltuion 。

解决scheme包括将这些行包含到Web应用程序项目( .csproj文件)中,该项目处理删除中间文件(因为他需要这些中间文件,所以无法为接受的答案提供解决scheme):

 <!--Deal with http://connect.microsoft.com/VisualStudio/feedback/details/779737/error-allowdefinition-machinetoapplication-beyond-application-level, we will need to clean up our temp folder before MVC project starts the pre-compile--> <PropertyGroup> <_EnableCleanOnBuildForMvcViews Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='' ">true</_EnableCleanOnBuildForMvcViews> </PropertyGroup> <Target Name="CleanupForBuildMvcViews" Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='true' and '$(MVCBuildViews)'=='true' " BeforeTargets="MvcBuildViews"> <ItemGroup> <_PublishTempFolderNamesToCleanup Include="Database;TransformWebConfig;CSAutoParameterize;InsertAdditionalCS;ProfileTransformWebConfig;Package;AspnetCompileMerge" /> </ItemGroup> <!--Force msbuild to expand all the wildcard characters so to get real file paths--> <CreateItem Include="@(_PublishTempFolderNamesToCleanup->'$(BaseIntermediateOutputPath)**\%(identity)\**\*')"> <Output TaskParameter="Include" ItemName="_EvaluatedPublishTempFolderNamesToCleanup" /> </CreateItem> <Delete Files="@(_EvaluatedPublishTempFolderNamesToCleanup)" /> </Target> 

注意:出于某种原因,可能是因为我自己把它包含在项目中,我构build视图的构build目标被命名为"BuildViews" ,而不是"MvcBuildViews" ,所以我必须相应地修改BeforeTargets属性。