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

Posted

技术标签:

【中文标题】Web.config 转换:无法识别的属性“xmlns:xdt”。请注意,属性名称区分大小写【英文标题】:Web.config transformation: Unrecognized attribute 'xmlns:xdt'. Note that attribute names are case-sensitive 【发布时间】:2012-09-26 02:55:26 【问题描述】:

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

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

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

开始更新

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

<MvcBuildViews>true</MvcBuildViews>

一旦放回 false,上述错误就会消失。我希望构建视图,因为它可以阻止很多愚蠢的视图代码错误等,并且是性能增强(页面是预编译而不是 jit)

有人知道这是什么原因导致的错误吗?这是一个错误吗?

结束更新

<?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>

【问题讨论】:

上面的web.release.config和MS提供的完全一样 我从未接触过 MvcBuildViews,它默认为 false。这个错误突然出现 @AndrewHarry 很高兴将其中一个答案标记为正确,毕竟这段时间 =) @AndreCalil 我会将一个标记为“答案”,但正如你所说,这是很久以前的事了,我不知道哪个是最好的 @AndrewHarry 请注意,您假设 MvcBuildViews 可以防止服务器上的“jitting”(或代码生成 + 编译 + jitting 真的)。请注意,它实际上并没有做任何这些事情。它仅有助于验证您的构建。看到这个线程 - ***.com/questions/383192/compile-views-in-asp-net-mvc 【参考方案1】:

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

【讨论】:

好一个。我正要违背我的意愿将 MvcBuildViews 设置为 false 只是为了摆脱这个错误。谢谢! 男孩,我认为“清洁解决方案”就是这个意思。我猜我错了。 宣布获胜 在 VS 2019 中不适合我。我运行了 Clean 解决方案,我删除了 obj 和 bin,然后运行了 Rebuild All。【参考方案2】:

这是一种解决方法,但您可以在 pre-build 命令中添加以下行:

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

右键单击您的项目 > 属性 > 构建事件 > 预构建

【讨论】:

如果您的项目位于包含空格的路径中,请记住在 $(ProjectDir)obj\* 部分周围加上引号。 @MathiasLykkegaardLorenzen 是的,确实。谢谢。 @gldraphael 感谢您的反馈,很高兴为您提供帮助 我还必须将其添加为构建后事件以使事情正常运行 这个问题很烦人,因为它并非在每个构建中都会发生。感谢@AndreCalil 按照您的建议为我解决了这个问题!【参考方案3】:

这适用于持续集成和 WebDeploy:

这个问题在我设置的那一刻出现

<MvcBuildViews>true</MvcBuildViews>

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

在阅读和测试我发现的关于这个问题的所有内容后,我有一个解决方法,它也适用于通过 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!!

更新: 将 debug 和 release 替换为 $(ConfigurationName) 并删除了生成的重复行

【讨论】:

我希望我能完全理解为什么会发生这种情况。当我在本地机器上运行我的 TeamCity 服务器时,一切正常。一旦我们将 TeamCity 移动到专用的构建服务器,我们就开始遇到这个问题。也许值得开始一个 MS Connect 问题。 连接问题在这里创建:connect.microsoft.com/VisualStudio/feedback/details/933625/… 我尝试了几种解决方案,包括 Pre/Post-build 事件命令行。这似乎只在第一次工作,但随后的构建不断失败。到目前为止,似乎只有 MvcBuildViews=false 提供了最一致的修复,但并不是每个项目都可以接受的解决方法。【参考方案4】:

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

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

从主 Web.config 并将其留在 Web.debug.config 和 Web.release.config 中

【讨论】:

【参考方案5】:

Microsoft Team 提供了另一种解决方法。详情见here。

只需将此 sn-p 复制粘贴到您的 .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”文件夹。

【讨论】:

【参考方案6】:

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

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

【讨论】:

你是救世主!.. 怎么没有人使用这个解决方案.. 非常感谢@JOB.. 这适用于 winforms、app.config - slowcheetah 转换!【参考方案7】:

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

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 消失。

【讨论】:

@AndreCalil 不,不是我。 没关系,所以。有些人只是不告诉我为什么就投了反对票。去图吧!【参考方案8】:

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

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

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

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

希望这对某人有所帮助

【讨论】:

【参考方案9】:

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

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

【讨论】:

【参考方案10】:

我只是在下面的 web.config 上更改

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

<configuration>

解决了问题

【讨论】:

【参考方案11】:
    右击项目,点击发布 转到设置 -> 文件发布选项 取消选中发布期间预编译

如果您使用的是 Visual Studio 发布,这将防止 web.debug.config/web.release.config 将文件注入回 web.config。

【讨论】:

以上是关于Web.config 转换:无法识别的属性“xmlns:xdt”。请注意,属性名称区分大小写的主要内容,如果未能解决你的问题,请参考以下文章

Web.config 转换:未声明转换属性

“无法识别的类型'员工'。忽略。C:/ .....”从.xml读取输入并将输出写入.xls文件+ perl时出错

核心数据-[Decodable.Address initWithCoder:]:发送到实例的无法识别的选择器

无法识别的属性 requestValidationMode 请注意属性区分大小写 这是怎么回事

绑定 .NET Core 无法识别的配置属性

访问 URLSessionConfiguration 子类的属性时无法识别的选择器