当从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("$(BaseIntermediateOutputPath)", "PackageTmp", 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=false
和PrecompileBeforePublish=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为我工作,我从来没有遇到过这个问题。