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”。请注意,属性名称区分大小写的主要内容,如果未能解决你的问题,请参考以下文章
“无法识别的类型'员工'。忽略。C:/ .....”从.xml读取输入并将输出写入.xls文件+ perl时出错
核心数据-[Decodable.Address initWithCoder:]:发送到实例的无法识别的选择器