Wie kann ein XSD-SchemaLocation-Attribut in VS angegeben werden, wenn sich die referenzierte Schemadatei in einem anderen Projekt / einer anderen Assembly befindet?

8

BEARBEITEN Siehe meine Lösung unter / EDIT

Ich habe eine Visual Studio-Lösung mit zwei Projekten.

  • Projekt 1 (nennen Sie es ReferencedProject) enthält eine XML-Schemadatei (ReferencedSchema.xsd).
  • Projekt 2 (nennen wir MainProject) enthält ReferencedProject als Referenz. MainProject hat auch eine Schemadatei (MainSchema.xsd).

MainSchema.xsd enthält den folgenden Code:

%Vor%

Da sich "ReferencedSchema.xsd" nicht im selben Ordner befindet (es befindet sich nicht einmal im selben Projekt), wird die Fehlermeldung "Referencedschema.xsd konnte nicht aufgelöst werden" angezeigt. Macht Sinn.

Wenn ich das xs: include-Element zu diesem bearbeiten ...

%Vor%

... der Fehler verschwindet. Beachten Sie jedoch, dass ich einen relativen Pfad zum Schema angegeben habe, der nur in der Ordnerhierarchie meiner Lösung innerhalb funktioniert. Das ist großartig, wenn ich das Schema im Editor anschaue, aber nicht so toll, wenn ich mein Projekt kompiliere. Wenn ich nach dem Kompilieren in meinen "bin" -Ordner schaue, ist die Ordnerhierarchie völlig anders (die beiden xsd-Dateien landen tatsächlich im selben Ordner).

Ich habe versucht, dies zu umgehen, indem ich die Funktion "Vorhandenes Element als Link hinzufügen" von Visual Studio benutzte und eine Verknüpfung zur Datei ReferencedSchema.xsd im selben Ordner wie meine Haupt-Schemadatei einführte, aber das hat nicht funktioniert. Der XSD-Validator ist anscheinend nicht in der Lage, so zu tun, als wäre die Verbindung die tatsächliche Datei.

Mein Problem ist also, dass es keine URI gibt, die ich für SchemaLocation bereitstellen kann, die in beiden Situationen (innerhalb des Solution Explorers und während der Laufzeit) gültig ist. Hat jemand irgendwelche Vorschläge?

Danke!

BEARBEITEN

Ich entschied mich dafür:

%Vor%

Das ist korrekt, solange ich Dinge in Visual Studio betrachte, die bei der Ausführung meines Codes nicht korrekt sind.

Damit es auch zur Laufzeit funktioniert, ersetze ich dynamisch die schemaLocation durch die korrekte relative Referenz wie folgt:

%Vor%

Ich ging mit dieser Lösung, weil alles jetzt funktioniert, ob ich meine XML- und XSD-Dateien in Visual Studio anschaue oder meine App laufe / debugge.

    
devuxer 01.07.2009, 23:43
quelle

3 Antworten

8

XSD unterstützt nur URI-Speicherorte, nicht Pfadspeicherorte. Dies bedeutet, dass file:///C:/path/to/VS/Projects/ReferencedProject/Data/ReferencedSchema.xsd gültig ist, aber nicht ../../ReferencedProject/Data/ReferencedSchema.xsd .

    
T0xicCode 21.07.2009, 13:46
quelle
1

Disclaimer: Ich weiß nicht viel über XML-Schema. Wie auch immer, ich stieß auf das gleiche Problem wie du.

Die Verwendung von xs: import anstelle von xs: include scheint mein Problem in VS Designer zu lösen.

Erstes Schema:

%Vor%

Zweites Schema:

%Vor%

Beim Bearbeiten des XML-Schemas in Visual Studio können Sie über den Menüpunkt XML - & gt; sehen, welche Schemas aktiv sind. Schemas.

    
Menno Squared 19.08.2011 09:56
quelle
0

Verwenden Sie eine öffentliche URL oder eine gemeinsame Netzwerkfreigabe, um beide Dateien an diesem Speicherort abzulegen.

    
eschneider 01.07.2009 23:49
quelle

Tags und Links