Visual Studio は常に App.config に間違った xsd を選択します 質問する

Visual Studio は常に App.config に間違った xsd を選択します 質問する

まず、次のような構成の .NET 4.0 アプリケーションがあります。

<?xml version="1.0"?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
</configuration>

この質問と同じ問題がありました:Visual Studio 2010 / .Net 4.0 に変換した後、app.config に「スキーマ情報が見つかりませんでした」と表示される: エディターによってサポートされるRuntime 要素が認識されなかったため、ヒントが表示されました。

次に、答えに従いました。app.config エディターで、プロパティ ウィンドウに移動しました。そこで、スキーマ エントリを選択しました。

DotNetConfig.xsdの選択を削除し、代わりにDotNetConfig35.xsdを選択しましたが、VSは常に自動的にDotNetConfig.xsdを再度追加します。明示的に「このスキーマを使用しない」に設定したり、取り除くリストからスキーマを選択すると、そのスキーマは自動的にリストに再度追加され、選択されます。

同じ要素を定義する 2 つのスキーマが選択されているため、多くの警告が表示されます。

DotNetConfig35.xsd を使用するようにスキーマを変更し、DotNetConfig.xsd が自動的に再度追加されないようにするにはどうすればよいですか?

ベストアンサー1

私は問題を次のように解釈しています: ファイルの要素DotNetConfig.xsdの定義が間違っている(または完全ではない) <startup>。すべてのDotNetConfig.xsd、、およびファイルの230行目にはDotNetConfig35.xsdDotNetConfig30.xsdDotNetConfig20.xsd

<xs:element name="startup" vs:help="configuration/startup" />

一方、マイクロソフトはスタートアップ設定スキーマ空でない要素として。したがって、ディレクトリ (または64 ビット システムのディレクトリ)のDotNetConfig.xsdすべてのDotNetConfigXX.xsdファイル内の上記の行を次の行に置き換えることをお勧めします。%ProgramFiles%\Microsoft Visual Studio 10.0\Xml\Schemas%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Xml\Schemas

<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>)。ただし、ここでは問題の原因と、それを修正する 1 つの方法についてのみ説明したいと思います。

ちなみに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 = ''" />

したがって、拡張子を持つすべてのファイルは、.configVisual Studio によって、上記のファイルのいずれかによって記述された XSD スキーマを持つファイルとして解釈されます。

おすすめ記事