Web.config转换:无法识别的属性'xmlns:xdt'。请注意,属性名称区分大小写

时间:2012-10-05 00:38:44

标签: asp.net-mvc-3 web-config

我在MVC 3.0项目中遇到了这个奇怪的间歇性错误 当我构建项目时,有时会收到以下错误消息:

  

无法识别的属性'xmlns:xdt'。请注意,属性名称是   区分大小写的。

这是指标准的web.config转换文件(下面复制了Web.Release.config) 没有其他错误或警告。这是在调试模式和发布中发生的。 如果我清理解决方案,有时它会清除

BEGIN UPDATE

发现了这个问题。在MVC项目文件(MyProject.csproj)中,我将构建视图设置为true

<MvcBuildViews>true</MvcBuildViews>

一旦回到 false ,上述错误就会消失。我想建立视图,因为它停止了很多愚蠢的视图代码错误等,并且是性能增强(页面是预编译而不是jit)

任何人都知道这是导致错误的原因吗?这是一个错误吗?

END UPDATE

<?xml version="1.0"?>

<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    In the example below, the "SetAttributes" transform will change the value of 
    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator 
    finds an atrribute "name" that has a value of "MyDB".

    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <!--
      In the example below, the "Replace" transform will replace the entire 
      <customErrors> section of your Web.config file.
      Note that because there is only one customErrors section under the 
      <system.web> node, there is no need to use the "xdt:Locator" attribute.

      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
</configuration>

11 个答案:

答案 0 :(得分:78)

我遇到了同样的问题。 你会发现很多与MvcBuildViews有关的戏弄和各种错误条件。 但似乎没有人提到这个特殊的错误。 一个对我有用的快速修复是删除受影响的Web项目的“obj”目录的内容,然后重建。

答案 1 :(得分:31)

这是一种解决方法,但您可以在预构建命令中添加以下行:

del $(ProjectDir)obj\* /F /S /Q

右键单击您的项目&gt;属性&gt;构建活动&gt;预生成

答案 2 :(得分:9)

这适用于持续集成和WebDeploy:

我设置

的那一刻就会出现此问题
<MvcBuildViews>true</MvcBuildViews>

在我的项目文件中,我需要来做。

在阅读并测试了我发现的关于这个问题的所有内容后,我有一个wokraround,也可以通过MSBuild与WebDeploy一起使用

MSBUild.exe ... /p:DeployOnBuild=true

您(仅)需要在构建前和构建后事件期间删​​除构建文件夹中的TransformWebConfig子文件夹。它甚至可以与持续集成服务器一起使用,如果没有文件夹则会中断

预构建事件命令行:

if exist "$(ProjectDir)obj\$(ConfigurationName)\transformwebconfig\" del "$(ProjectDir)obj\$(ConfigurationName)\transformwebconfig\*" /F /S /Q

构建后事件命令行:

if exist "$(ProjectDir)obj\$(ConfigurationName)\transformwebconfig\" del "$(ProjectDir)obj\$(ConfigurationName)\transformwebconfig\*" /F /S /Q

如果删除整个Resharper文件夹,这对obj工作正常,有时会混淆。

务必将Run the post-build event设置为always !!

<强>更新 用$(ConfigurationName)替换了调试和发布,并删除了生成的重复行

答案 3 :(得分:1)

我通过做与约伯所说的相同的事情来解决我的冲突。删除属性

xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"

从主Web.config中将其保留到Web.debug.config和Web.release.config

答案 4 :(得分:1)

Microsoft团队还有另一种解决方法。详情请见here

只需将此代码段复制粘贴到.csproj或.vbproj文件中即可:

<PropertyGroup>
  <_EnableCleanOnBuildForMvcViews Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='' ">true</_EnableCleanOnBuildForMvcViews>
</PropertyGroup>
<Target Name="CleanupForBuildMvcViews" Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='true' and '$(MVCBuildViews)'=='true' " BeforeTargets="MvcBuildViews">
  <ItemGroup>
    <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\Package\**\*" />
    <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\TransformWebConfig\**\*" />
    <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\CSAutoParameterize\**\*" />
    <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\TempPE\**\*" />
  </ItemGroup>
  <Delete Files="@(_TempWebConfigToDelete)" />
</Target>

这将使清洁过程自动化[obj&#39;使用Build Targets的文件夹。

答案 5 :(得分:0)

我发现这对我来说效果更好:

del "$(ProjectDir)obj\*" /F /Q
del "$(ProjectDir)obj\$(ConfigurationName)\AspnetCompileMerge\*" /F /S /Q
del "$(ProjectDir)obj\$(ConfigurationName)\CSAutoParameterize\*" /F /S /Q
del "$(ProjectDir)obj\$(ConfigurationName)\Package\*" /F /S /Q
del "$(ProjectDir)obj\$(ConfigurationName)\ProfileTransformWebConfig\*" /F /S /Q
del "$(ProjectDir)obj\$(ConfigurationName)\TempPE\*" /F /S /Q
del "$(ProjectDir)obj\$(ConfigurationName)\TransformWebConfig\*" /F /S /Q

否则建立抱怨edmxResourcesToEmbed消失。

答案 6 :(得分:0)

只需从web.config中删除xmlns:xdt属性,但将其保存在web.release.config和web.debug.config中。

您的转型仍然有效 - 您的网站也将如此。

答案 7 :(得分:0)

我也见过这个。具体来说,在Visual Studio中的构建配置之间进行更改时,它是可重现的。

我之前的解决方法是删除\obj文件夹中的所有内容,但仔细检查完web.config之后,我发现它有一些错误的文本位于元素之外(即它是无效的XML)。

看起来配置转换只是在尝试执行转换时吞下了异常。

修正了我的web.config有效,现在一切正常。

希望这有助于某人

答案 8 :(得分:0)

我也遇到过这个问题。对我来说,这是因为我创建了一个名为&#34; DevDebug&#34;的新调试配置。我通过复制web.debug.config来修复它,名为web.DevDebug.config并将其添加到项目中。

然后,当我尝试运行aspnet编译器时,它很满意它可以找到要合并的配置文件的正确配置版本。

答案 9 :(得分:0)

我只需在web.config上更改

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

<configuration>

解决了问题

答案 10 :(得分:0)

  1. 右键单击该项目,单击发布
  2. 转到设置 - &gt; 文件发布选项
  3. 取消选中发布时预编译
  4. 如果您使用的是visual studio publish,这将阻止web.debug.config / web.release.config将文件注入web.config。