从VS2010发布时,allowDefinition ='MachineToApplication'错误(但仅在上一次构建之后)

Dan*_*ann 103 asp.net-mvc web-deployment one-click-web-publishing

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

但如果我已经建成它,我就无法发布它!我必须清理解决方案并再次发布.我知道这不是系统关键,但它真的很烦人."一键发布"不是"清洁解决方案,然后单击发布"

确切的错误如下:

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

我怀疑它与Views文件夹中的Web.Config有关,但是为什么只有在我之前构建一次之后.请注意,该应用程序一旦发布就可以正常工作.

ben*_*age 76

我的MVC应用程序遇到了同样的问题.这令人沮丧,因为我仍然希望我的视图被检查,所以我不想关闭MvcBuildViews

幸运的是,我遇到了一个给我答案的帖子.保持MvcBuildViews为true,然后您可以在项目文件中添加以下行:

<BaseIntermediateOutputPath>[SomeKnownLocationIHaveAccessTo]</BaseIntermediateOutputPath>
Run Code Online (Sandbox Code Playgroud)

并使该文件夹不在项目的文件夹中.适合我.这不是一个完美的解决方案,但它现在很好.确保从项目文件夹中删除文件夹(位于obj\Debug和/或obj\Release文件夹中),否则您将继续收到错误.

FWIW,MS知道这个错误 ......

  • 我认为删除obj文件夹是一个更简单的解决方案,而不是记住/维护项目文件中的更改.这似乎应该是最好的答案.(截至2011年中) (9认同)
  • 那个phil在那个博客上的解决方案对我不起作用.以上解决方案是我唯一的解决方案. (3认同)

jim*_*469 40

我删除了我的obj/Debug文件夹中的所有内容,并修复了此错误.这让我离开了

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

我的项目文件中的选项(使用T4MVC T4模板很方便).

编辑:只需使用"Build" - >"Rebuild Solution"菜单就可以轻松实现这一点(因为重建实际上是清除obj/Debug文件夹,然后构建解决方案).


jru*_*ell 26

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

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

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

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

  • 是的...根据Microsoft Ticket将"rmdir/S/Q"$(ProjectDir)\ obj"添加到post build部分解决了问题! (3认同)
  • @jrummell很有趣,我在mvc4项目中启用构建视图时遇到此MachineToApplication错误,认为它与某种程度上有关. (2认同)

Chr*_*nes 24

当obj文件夹中有Web项目输出(模板化web.config或临时发布文件)时,会发生此问题.使用的ASP.NET编译器不够智能,无法忽略obj文件夹中的内容,因此会抛出错误.

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

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

对此:

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

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