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 event
为always
!
更新:用$(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>
它解决了这个问题
- 右键单击该项目,单击发布
- 转到设置 – > 文件发布选项
- 在发布期间取消选中预编译
如果您使用的是Visual Studio发布,这将阻止将web.debug.config / web.release.config注入到web.config文件。
只需从web.config中删除xmlns:xdt属性,但将其保存在web.release.config和web.debug.config中即可。
您的转换仍然有效 – 您的网站也将起作用。