2010-12-04 24 views
20

en primer lugar, Tengo una aplicación .NET 4.0 con esta configuración:Visual Studio siempre se selecciona el xsd equivocado para App.config

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

que tenía el mismo problema como el de esta pregunta: app.config "Could not find schema information" after converting to Visual Studio 2010/.Net 4.0: El editor supported no reconoció el elemento supportedRuntime, lo que dio como resultado una sugerencia.

Luego, seguí la respuesta: estaba en el editor app.config y fui a la ventana Propiedades. Ahí seleccioné la entrada de Schemas.

Eliminé la selección de DotNetConfig.xsd y seleccioné DotNetConfig35.xsd, pero VS siempre agrega automáticamente DotNetConfig.xsd nuevamente. Incluso si lo configuré explícitamente para "no usar este esquema" o incluso , elimine el esquema de la lista: se agrega automáticamente a la lista nuevamente y se selecciona.

Como ahora tengo dos esquemas seleccionados que definen los mismos elementos, recibo muchas advertencias.

¿Cómo puedo cambiar el esquema para usar DotNetConfig35.xsd y NO hacer que DotNetConfig.xsd se agregue automáticamente de nuevo?

Respuesta

39

Interpreto el problema de la siguiente manera: el archivo DotNetConfig.xsd tiene una definición incorrecta (o no completa) del elemento <startup>. La línea 230 de todos los archivos DotNetConfig.xsd, DotNetConfig35.xsd, DotNetConfig30.xsd y DotNetConfig20.xsd contiene

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

Por otro lado Microsoft describe el elemento startup settings schema no como vacía. Así que sugiero para reemplazar la línea anterior en DotNetConfig.xsd y en todos los DotNetConfigXX.xsd archivos del directorio %ProgramFiles%\Microsoft Visual Studio 10.0\Xml\Schemas (o %ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Xml\Schemas directorio en sistemas de 64 bits) para las siguientes líneas

<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> 

después de tal modificación y reinicio de Visual Studio 2010 se no tendrá las advertencias que describió. De la causa, uno puede definir el esquema de todos los atributos o elementos más detallados (especialmente si encontramos documentación más detallada de la sección <startup>), pero quiero describir solo el motivo del problema y una forma de solucionarlo.

Por la forma en la elección entre la DotNetConfig.xsd, DotNetConfig35.xsd y otros archivos DotNetConfigXX.xsd se hará en base al contener el archivo de catalog.xml del mismo directorio, que describe el esquema here. La versión estándar del catalog.xml el archivo contiene las siguientes líneas

<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 = ''" /> 

Así que todos los archivos con la extensión .config será interpreta por Visual Studio como archivos con el esquema XSD descrito por uno de los archivos anteriores.

+1

Gracias. Eso hizo el truco. Ni siquiera pensé en la posibilidad de que el envío del xsd con VS pudiera ser incorrecto. –

+0

@Sebastian P.R. Gingter: ¡Bienvenido! Nadie es perfecto. Microsoft también. No es una buena idea tener un XSD para todos los archivos .config (app.config, web.config, etc.). Entonces hay otros problemas cercanos con el esquema de configuración. Sin embargo, me alegra saber que te ayudé. ¡El instinto de Mach! – Oleg

+0

También me quité 41 advertencias. Muchas gracias :) –

0

Esta es una publicación anterior, pero acabo de encontrar el mismo problema.

El enfoque que tomé fue el mismo que Ken Johnsrude sugirió antes: crear uno nuevo.archivo 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 Abrir proyecto

  2. XML> Crear esquema

    Esto creará "app.xsd" en% TEMP%

    EXAMPLE: c:\users\paulsm\AppData\Local\Temp\app.xsd 
    
  3. Mueva la aplicación.xsd al directorio del proyecto

  4. app.config, Haga clic derecho> Propiedades> Esquemas> ... app.xsd> Uso> Utilice este esquema = SÍ

0

Cuando me encontré con este problema, la razón por la ONU comprobar que el esquema no funcionaba resultó tener varias instancias de Visual Studio abiertas.

(tuve VS2015 abierto con un proyecto y VS2013 también abiertas al mismo tiempo con un proyecto diferente.)

Nota, varias versiones de Visual Studio y el cambio de ida y vuelta en el mismo proyecto/solución también parece así es como ocurrieron algunos problemas con los esquemas repetidos en primer lugar.

Cuestiones relacionadas