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

我在MVC 3.0项目中得到这个奇怪的intermitent错误当我生成项目有时我得到以下错误信息:

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

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

开始更新

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

<MvcBuildViews>true</MvcBuildViews> 

一旦回到错误上面的错误消失。 我想build立视图,因为它阻止了愚蠢的视图代码错误等等,是一个性能增强(页面预编译而不是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> 

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

这是一种解决方法,但是您可以将以下行添加到预生成命令中:

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

右键单击您的项目>属性>生成事件>预生成

这适用于持续集成和WebDeploy:

这个问题发生在我设定的时刻

 <MvcBuildViews>true</MvcBuildViews> 

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

经过阅读和testing我发现有关这个问题的一切,我有一个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 

如果你删除整个obj文件夹,这甚至可以和Resharper一起工作。

确保将Run the post-build eventalways

更新:用$(ConfigurationName)代替debugging和释放,并删除结果重复行

我以同样的方式解决了我的冲突。 删除属性

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

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

还有另一个来自Microsoft团队的解决方法。 在这里看到细节。

只需将此片段复制粘贴到.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> 

这将使用“构build目标”来自动清理“obj”文件夹。

我发现这对我更好:

 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 

否则build立(s)抱怨edmxResourcesToEmbed消失。

我也看到了。 具体而言,它在Visual Studio中的构buildconfiguration之间进行更改时具有可重复性。

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

貌似configuration转换只是在尝试执行转换时吞噬exception。

修正了我的web.config是有效的,所有的工作如预期。

希望这有助于某人

我也遇到了这个问题。 对我而言,这是由于我创build了一个名为“DevDebug”的新debuggingconfiguration。 我通过复制web.debug.config来修复它,名为web.DevDebug.config并将其添加到项目中。

然后,当我试图运行aspnet编译器,它很满意它可以find合适的configuration文件的合适的版本。

我只是改变web.config下面

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

 <configuration> 

它解决了这个问题

  1. 右键单击该项目,单击发布
  2. 转到设置 – > 文件发布选项
  3. 在发布期间取消选中预编译

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

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

您的转换仍然有效 – 您的网站也将起作用。