Visual Studio всегда выбирает неправильный xsd для App.config
Прежде всего, у меня есть приложение.NET 4.0 с такой конфигурацией:
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
У меня возникла та же проблема, что и в этом вопросе: app.config "Не удалось найти информацию о схеме" после преобразования в Visual Studio 2010 /.Net 4.0: элемент requiredRuntime не был распознан редактором, что привело к подсказке.
Затем я последовал ответу: я был в редакторе app.config и зашел в окно "Свойства". Там я выбрал запись схемы.
Я удалил выбор DotNetConfig.xsd и вместо этого выбрал DotNetConfig35.xsd, но VS всегда автоматически снова добавляет DotNetConfig.xsd. Даже если я явно укажу "не использовать эту схему" или даже удаляю схему из списка - она автоматически добавляется в список снова и выбирается.
Поскольку теперь у меня выбраны две схемы, которые определяют одинаковые элементы, я получаю много предупреждений.
Как я могу изменить схему, чтобы использовать DotNetConfig35.xsd и НЕ иметь автоматического добавления DotNetConfig.xsd снова?
3 ответа
Я интерпретирую проблему следующим образом: файл DotNetConfig.xsd
имеет неправильное (или не полное) определение <startup>
элемент. Линия 230 всего DotNetConfig.xsd
, DotNetConfig35.xsd
, DotNetConfig30.xsd
а также DotNetConfig20.xsd
файлы содержат
<xs:element name="startup" vs:help="configuration/startup" />
С другой стороны, Microsoft описывает схему параметров запуска не как пустой элемент. Поэтому я предлагаю заменить вышеуказанную строку в DotNetConfig.xsd
и во всех DotNetConfigXX.xsd
файлы из %ProgramFiles%\Microsoft Visual Studio 10.0\Xml\Schemas
каталог (или %ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Xml\Schemas
каталог в 64-битных системах) в следующие строки
<xs:element name="startup" vs:help="configuration/startup">
<xs:complexType>
<xs:choice minOccurs="1" maxOccurs="1">
<xs:element name="requiredRuntime" vs:help="configuration/startup/requiredRuntime">
<xs:complexType>
<xs:attribute name="version" type="xs:string" use="optional" />
<xs:attribute name="safemode" type="xs:boolean" use="optional" />
</xs:complexType>
</xs:element>
<xs:element name="supportedRuntime" minOccurs="1" maxOccurs="unbounded" vs:help="configuration/startup/supportedRuntime">
<xs:complexType>
<xs:attribute name="version" type="xs:string" use="optional" />
<xs:attribute name="sku" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
</xs:choice>
<xs:attribute name="useLegacyV2RuntimeActivationPolicy" type="xs:boolean" use="optional" />
<!-- see http://msdn.microsoft.com/en-us/library/bbx34a2h.aspx -->
</xs:complexType>
</xs:element>
После такой модификации и перезапуска Visual Studio 2010 у вас не будет предупреждений, которые вы описали. Конечно, можно определить схему всех атрибутов или элементов более подробно (особенно если мы найдем более подробную документацию <startup>
раздел), но я хочу описать только причину проблемы и один способ ее устранения.
Кстати выбор между DotNetConfig.xsd
, DotNetConfig35.xsd
и другие DotNetConfigXX.xsd
файлы будут сделаны на основе содержания catalog.xml
файл из того же каталога, схема которого описана здесь. Стандартная версия catalog.xml
файл содержит следующие строки
<Association extension="config" schema="%InstallRoot%/xml/schemas/dotNetConfig20.xsd" condition="starts-with($TargetFrameworkMoniker, '.NETFramework,Version=v2.')" />
<Association extension="config" schema="%InstallRoot%/xml/schemas/dotNetConfig30.xsd" condition="starts-with($TargetFrameworkMoniker, '.NETFramework,Version=v3.0')" />
<Association extension="config" schema="%InstallRoot%/xml/schemas/dotNetConfig35.xsd" condition="starts-with($TargetFrameworkMoniker, '.NETFramework,Version=v3.5')" />
<Association extension="config" schema="%InstallRoot%/xml/schemas/dotNetConfig.xsd" condition="starts-with($TargetFrameworkMoniker, '.NETFramework,Version=v4.') or $TargetFrameworkMoniker = ''" />
Так что все файлы, имеющие .config
расширение будет интерпретироваться Visual Studio как файлы со схемой XSD, описанной одним из вышеуказанных файлов.
Когда я столкнулся с этой проблемой, причиной отказа от проверки схемы оказалось наличие нескольких открытых экземпляров Visual Studio.
(VS2015 у меня был открыт с одним проектом, а VS2013 также был открыт одновременно с другим проектом.)
Обратите внимание, что несколько версий Visual Studio и переключение туда и обратно в одном и том же проекте / решении также, по-видимому, вызвали некоторые проблемы с повторяющимися схемами.
Для меня я заметил, что у меня есть куча XML Schemas
которые были продублированы в XML->Schemas
Я просто пометил дубликаты как Don't Use
, В частности, все те, которые не были связаны с Visual Studio 2017. Проблема немедленно исчезла, и больше не показывалось лишних предупреждений.
Это старый пост, но я только что столкнулся с той же проблемой.
Подход, который я выбрал, был таким же, как предложенный Кеном Джонсрудом выше - создать новый файл.xsd:
MSVS> Открыть проект app.config
XML> Создать схему
Это создаст "app.xsd" в%TEMP%
EXAMPLE: c:\users\paulsm\AppData\Local\Temp\app.xsd
Переместить app.xsd в каталог проекта
App.Config, щелкните правой кнопкой мыши> Свойства> Схемы> ... app.xsd > Использовать> Использовать эту схему = ДА