Преобразование Web.config: нераспознанный атрибут 'xmlns: xdt'. Обратите внимание, что имена атрибутов чувствительны к регистру
Я получаю эту странную непоследовательную ошибку в проекте MVC 3.0
Когда я создаю проект, иногда появляется следующее сообщение об ошибке:
Непризнанный атрибут 'xmlns: xdt'. Обратите внимание, что имена атрибутов чувствительны к регистру.
Это относится к стандартному файлу tranformation web.config(копия Web.Release.config)
Других ошибок или предупреждений нет. Это происходит в режиме отладки и выпуска.
Иногда он очищается, если я очищаю решение
BEGIN UPDATE
Обнаружена проблема. В файле MVC Project (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>
Ответы
Ответ 1
Я столкнулся с той же проблемой.
Вы найдете много шуток, связанных с MvcBuildViews и различными условиями ошибки.
Но никто не упоминает эту конкретную ошибку.
Быстрое исправление, которое сработало для меня, - удалить содержимое каталога "obj" для затронутого веб-проекта, а затем восстановить.
Ответ 2
Это своего рода обходной путь, но вы можете добавить следующую строку в свои команды pre-build:
del $(ProjectDir)obj\* /F /S /Q
Щелкните правой кнопкой мыши свой проект > Свойствa > События сборки > Предварительная сборка
Ответ 3
Это работает с Continuous Integration и WebDeploy:
Эта проблема возникает в момент, когда я устанавливаю
<MvcBuildViews>true</MvcBuildViews>
в моем файле проекта, который мне нужен.
После прочтения и тестирования всего, что я нашел об этой проблеме, у меня есть wokraround, который также работает с WebDeploy через MSBuild
MSBUild.exe ... /p:DeployOnBuild=true
Вам (только) необходимо удалить подпапку TransformWebConfig в вашей сборной папке во время событий до и после сборки. Он работает даже с серверами непрерывной интеграции, которые ломаются, если нет папки
Командная строка события Pre-build:
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
!!
UPDATE:
Заменена отладка и выпуск с помощью $(ConfigurationName) и удалена результирующая повторяющаяся строка
Ответ 4
Я разрешаю свой конфликт, делая то же самое, что сказал Иов. Удаление атрибута
xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"
Из основного Web.config и оставьте его в файле Web.debug.config и Web.release.config
Ответ 5
Существует другое обходное решение от Microsoft Team. Подробнее см. здесь.
Просто скопируйте этот фрагмент в свой файл .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
Я нашел, что это работает лучше для меня:
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
исчезает.
Ответ 7
просто удалите атрибут xmlns: xdt из web.config, но сохраните его в файле web.release.config и web.debug.config.
Ваше преобразование все равно будет работать - и ваш веб-сайт также будет.
Ответ 8
Я тоже это видел. В частности, он был воспроизводимым при изменении между конфигурациями сборки в Visual Studio.
Мое обходное решение ранее заключалось в том, чтобы удалить все в папке \obj
, но, внимательно прочитав мой web.config, я обнаружил, что у него был некоторый ошибочный текст, сидящий за пределами элемента (т.е. он был недопустимым XML).
По-видимому, преобразования config просто поглощали исключение при попытке выполнить преобразование.
Исправлена ошибка моего web.config, и теперь все работает как ожидается.
Надеюсь, это поможет кому-то
Ответ 9
Я также столкнулся с этой проблемой. Для меня это было вызвано тем, что я создал новую конфигурацию отладки под названием "DevDebug". Я исправил его, сделав копию web.debug.config, названный web.DevDebug.config и добавив его в проект.
Затем, когда я попытался запустить компилятор aspnet, он был удовлетворен тем, что смог найти правильную конфигурационную конфигурацию файла конфигурации для слияния.
Ответ 10
Я просто изменяю ниже на web.config
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
to
<configuration>
Исправлена проблема
Ответ 11
- Щелкните правой кнопкой мыши проект, нажмите Опубликовать
- Перейти к Настройки → Параметры публикации файла
- Снимите флажок Прекомпилировать во время публикации
Это предотвратит запуск файла web.debug.config/web.release.config файла web.config, если вы используете публикацию Visual Studio.