当从VS2010发布时,allowDefinition ='MachineToApplication'错误(但只在之前的版本之后)

我可以在我的本地计算机上运行我的Asp.Net MVC 2应用程序,而不会出现问题。 只是运行/debugging。

但是,如果我已经build立了它,我不能发布它! 我必须清理解决scheme并再次发布。 我知道这不是系统的关键,但它真的很烦人。 “一键发布”不是“干净的解决scheme,然后一键发布”

确切的错误如下:

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

我怀疑这是与视图文件夹中的Web.Config有关,但为什么只有在我之前构build一次。 只是要注意,该应用程序发布后一切正常。

我有我的MVC应用程序相同的问题。 这是令人沮丧的,因为我仍然希望我的意见被检查,所以我不想closuresMvcBuildViews

幸运的是,我遇到了一个给我答案的post 。 保持MvcBuildViews为true ,那么你可以在你的项目文件下面添加下面一行:

<BaseIntermediateOutputPath>[SomeKnownLocationIHaveAccessTo]</BaseIntermediateOutputPath> 

并使该文件夹不在您的项目文件夹中。 为我工作。 这不是一个完美的解决scheme,但现在是好的。 确保从项目文件夹中删除了文件夹(位于obj \ Debug和/或obj \ Release文件夹中),否则您将不断收到错误消息。

FWIW, MS知道这个错误 …

我删除了我的OBJ /debugging文件夹中的一切,它修复了这个错误。 这让我离开了

 <MvcBuildViews>true</MvcBuildViews> 

选项在我的项目文件(这与T4MVC T4模板派上用场)。

编辑:只需使用“构build” – >“重build解决scheme”菜单(因为重build实际上是清除obj / Debug文件夹,然后构build解决scheme)可以更容易地实现。

我正在MS Connect页面上使用此解决方法来解决此错误。 它会在运行AspNetCompiler之前清除项目下所有的obj和temp文件(所有configuration)。

修改项目文件中的MvcBuildViews目标,使其依赖于清理Visual Studio创build的打包文件的目标。 这些目标自动包含在Web应用程序项目中。

每次执行MvcBuildViews目标时,所有打包文件都将被删除。

 <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'" DependsOnTargets="CleanWebsitesPackage;CleanWebsitesPackageTempDir;CleanWebsitesTransformParametersFiles;"> <AspNetCompiler VirtualPath="temp" PhysicalPath="$(MSBuildProjectDirectory)" /> </Target> 

在obj文件夹中存在Web项目输出(模板化web.config或临时发布文件)时,会发生此问题。 使用的ASP.NET编译器不够聪明,忽略obj文件夹中的东西,所以它会抛出错误。

另一个解决方法是在调用<AspNetCompiler>之前调用发布输出。 打开你的.csproj并改变它:

 <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> </Target> 

对此:

 <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> <ItemGroup> <ExtraWebConfigs Include="$(BaseIntermediateOutputPath)\**\web.config" /> <ExtraPackageTmp Include="$([System.IO.Directory]::GetDirectories(&quot;$(BaseIntermediateOutputPath)&quot;, &quot;PackageTmp&quot;, System.IO.SearchOption.AllDirectories))" /> </ItemGroup> <Delete Files="@(ExtraWebConfigs)" /> <RemoveDir Directories="@(ExtraPackageTmp)" /> <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> </Target> 

这将删除\ obj下的所有web.configs以及\ obj下的所有PackageTmp文件夹。

关于jrummell的解决scheme,设置:

DependsOnTargets="CleanWebsitesPackage;CleanWebsitesPackageTempDir;CleanWebsitesTransformParametersFiles;"

适用于VS 2010 ,但不适用于VS 2012 。 2012年你必须把:

DependsOnTargets="CleanWebsitesPackage;CleanWebsitesWPPAllFilesInSingleFolder;CleanWebPublishPipelineIntermediateOutput"

资源:

VS 2010:C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.targets

VS 2012:C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.targets

如果您正在使用Web Publish,则可以将MvcBuildViews=falsePrecompileBeforePublish=true设置MvcBuildViews=false在复制到临时文件夹(即将发布/打包之前)之前进行预编译。

注: PrecompileBeforePublish仅受“新”Web发布pipe道堆栈(VS2010 SP1 + Azure SDK或VS2012 RTM)的支持。 如果您使用VS2010 RTM,则需要使用其中一种替代方法。

我知道这已经回答了,但我只是想添加一些有趣的东西,我发现。

我已经在项目中设置“MvcBuildViews”为false,删除了所有的bin和obj文件夹,我仍然得到错误。 我发现有一个“.csproj.user”文件仍然有“MvcBuildViews”设置为true。

我删除了“.csproj.user”文件,然后一切工作。

因此,确保您正在更改您的csproj文件,您也可以更改或删除“.csproj.user”文件。

我也有这个问题,所以我在项目属性中创build了一个预生成事件来清理输出目录( ${projectPath}\bin,${projectPath}\obj\${ConfigurationName} )。 在另一个项目上,我也遇到了这个错误,即使在清理过程中也是如此。 在第二个项目中,我正在编译项目文件中列出的视图:

 <MvcBuildViews>true</MvcBuildViews> 

我把真正的变成了错误,并且不再抱怨那个错误,但是仍然正确地运行。 我不会声称我确切地知道是什么导致了第二个错误,但至less让我暂时前进。

问题与中间文件有关,但另一个解决scheme是在build立视图之前清理这些中间文件。

这个解决scheme已经包含在VS的某些版本中,但是我只能说我在VS 2013 Update 5中遇到了问题。(请参阅下面的“当心” ,它可以在此版本中修复,但不能在我的特定非标准案件)。

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

解决scheme包括将这些行包含到Web应用程序项目( .csproj文件)中,该文件处理删除中间文件:

 <!--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属性。 我还通过删除PropertyGroup并简化条件来简化目标,如下所示:

  <Target Name="CleanupForBuildMvcViews" Condition="'$(MVCBuildViews)'=='true' " BeforeTargets="BuildViews"> <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> 

在我看来,当我有MvcBuildViews和PrecompileDuringPublish都是真的 – 是什么原因造成这个问题。

所以我删除了PrecompileDuringPublish,该解决scheme为我工作,我从来没有遇到过这个问题。

在这里输入图像描述