web-dev-qa-db-ja.com

VisualStudioは常にApp.configに対して間違ったxsdを選択します

まず、次の構成の.NET4.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に変換した後、スキーマ情報が見つかりませんでした" :supportedRuntime要素がエディターによって認識されませんでした。ヒントになります。

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

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

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

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

私はこの問題を次のように解釈します。ファイル_DotNetConfig.xsd_の_<startup>_要素の定義が間違っている(または完全ではない)。すべての_DotNetConfig.xsd_、_DotNetConfig35.xsd_、_DotNetConfig30.xsd_、および_DotNetConfig20.xsd_ファイルの230行目に

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

一方、Microsoftは スタートアップ設定スキーマ を空でない要素として説明しています。したがって、_DotNetConfig.xsd_および_DotNetConfigXX.xsd_ディレクトリ(または64ビットシステムでは%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Xml\Schemasディレクトリ)のすべての_%ProgramFiles%\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>
_

このような変更とVisualStudio 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 = ''" />
_

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

43
Oleg

この問題が発生したとき、スキーマのチェックを外さなかった理由は、VisualStudioの複数のインスタンスが開いていることが判明しました。

(VS2015を1つのプロジェクトで開き、VS2013も同時に別のプロジェクトで開きました。)

Visual Studioの複数のバージョンと、同じプロジェクト/ソリューションでの切り替えも、スキーマの繰り返しに関するいくつかの問題が最初に発生した方法であるように思われることに注意してください。

1
gremlin

これは古い投稿ですが、同じ問題が発生しました。

私が採用したアプローチは、Ken Johnsrudeが上記で提案したものと同じで、新しい.xsdファイルを作成するためのものです。

http://w3stack.org/question/c-how-to-fix-error-could-not-find-schema-information-for-the-attributeelement-by-creating-schema/

  1. MSVS>プロジェクトapp.configを開きます

  2. XML>スキーマの作成

    これにより、%TEMP%に「app.xsd」が作成されます

     EXAMPLE: c:\users\paulsm\AppData\Local\Temp\app.xsd
    
  3. App.xsdをプロジェクトディレクトリに移動します

  4. App.Config、右クリック>プロパティ>スキーマ> ... app.xsd>使用>このスキーマを使用=はい

0
paulsm4