2013-03-19 9 views
7

Wenn wir Add Service Reference erstellt Visual Studio XSD-Dateien wie folgt:Service-Reference Update: Erzeugen von redundanten Dateien

  1. MyService1.xsd
  2. MyService2.xsd
  3. MyService3.xsd

Zusammen mit WSDL- und .SVMAP-Dateien.

Bei nachfolgenden Updates, mit Update Service Refernce, statt Aktualisierung über Dateien VS 2010 Halten Sie das Hinzufügen mehr & mehr Dateien ihre Namen anhängt ..

  1. MyService31.xsd
  2. MyService33 MyService32.xsd .xsd ....

Dies führt zu Problemen beim Einchecken von Dateien. & geplante Builds in der Umgebung für kontinuierliche Integration schlägt fehl. :-(ohne Fehler auf Seite Codierung.

Wie Sie dieses Szenario gehe? Können wir Visual Studio erzwingen Update vorhandene Dateien zu erzwingen?

+0

Es sollte wiederverwendet werden die Dateien als Standard, nicht sicher, was verursacht sie jedes Mal neue Dateien erstellen. Welche SVN verwendest du?Vielleicht werden die Dateien nur zum Lesen eingestellt und verhindern, dass Visual Studio die Dateien aktualisieren kann? – JeremyK

+1

Ich denke, das ist TFS –

+1

@ JeremyK, @ Clinton Wir verwenden 'IBM Clearcase' für die Versionskontrolle. Ich denke jedoch, dass das Attribut readonly von Dateien nicht der Grund sein sollte, neue Dateien zu erzeugen ... Da es andere readonly-Dateien in den Lösungen gibt, wie ... 1. Reference.cs 2. Web.Config 3. .svcmap file .. Der Befehl 'Service Reference Update' fordert mich auf, diese Dateien zu überschreiben/auschecken. – Abhijeet

Antwort

0

I svcutil für beide Erzeugen von Metadaten (wsdl + XSD) und zum Erzeugen lieber mit Proxy-Code

das schöne daran, dass keine ‚hinter den Kulissen Magie‘ geschieht;.. Sie sehen und jeden Aspekt steuern

  • eine cmd-Datei erstellen Sie die WSDL + XSDs für den Dienst für immer. Führen Sie den Cmd wann immer y Unsere Service-Schnittstelle ändert sich. Fügen Sie die resultierenden wsdl- und xsd-Dateien zur Quellcodeverwaltung hinzu, wie Sie es auch mit anderen externen Abhängigkeiten tun würden (zB DLLs von Drittanbietern). Svcutil kann die Metadaten aus einer URL abrufen oder aus einer .NET-DLL extrahieren, wenn die Assembly den Service implementiert.

  • Erstellen Sie eine cmd-Datei zum (erneuten) Generieren des Proxy-Codes. Führen Sie es immer dann aus, wenn sich die Servicemetadaten ändern. Fügen Sie die resultierende CS-Datei zu Ihrem Projekt hinzu.

Die cmd-Datei würde in etwa so aussehen. Sie können Namespace-Mapping, Serializer, Sammlungsverwendung usw. definieren. Überprüfen Sie die Hilfe von SVCutil. ....

svcutil.exe \ Referenzen \ MyService \ * Wsdl \ Referenzen \ MyService \ * xsd /namespace: *, MyNamespace /out:.\Source\MySubfolders\MySeviceProxy.cs /Serializer: DataContractSerializer /ct:System.Collections.Generic.List`1

+0

Hilft ihm nicht wirklich bei seiner Frage. – JeremyK

+0

Ja, es beantwortet nicht die Frage, warum Visual Studio dies tut, sondern schlägt eine alternative Lösung für die Behandlung von Service-Metadaten vor, die helfen kann, das Problem der xsd-Dateinamen zu vermeiden. Ich denke nicht, dass es passieren wird, wenn SVCutil direkt verwendet wird. – Vizu

+1

Es sollte nicht in erster Linie passieren. Ich benutze beide Methoden und sie haben ihre Kompromisse, aber ich habe nie gesehen, was er erlebt und es ist wahrscheinlich nicht die Lösung, sondern etwas anderes im Weg. Ihn im Gegensatz zur Behebung des Problems zu einer anderen Lösung zu drängen, ist Zeitverschwendung. Wenn er keine benutzerdefinierten Änderungen an der Benutzeroberfläche vornehmen muss, ist das Klicken mit der rechten Maustaste und das Aktualisieren weitaus praktischer, als dass Sie bei jedem Update externe Tools ausführen und kopieren/einfügen müssen. – JeremyK

0

Bevor Sie versuchen, Ihre Service-Referenz zu aktualisieren, überprüfen Sie die automatisch generierten Dateien, damit VS auf diese Dateien zugreifen kann. Ich glaube, dass Ihre Dateien gesperrt sind, damit Visual Studio sie nicht ändern kann. Dies würde zu dem führen, was Sie sehen.

+0

Ich habe den gesamten Service-Referenz-Ordner ausgecheckt. Früher habe ich Dateien 'MyService1.xsd, MyService2.xsd, MyService3.xsd', beim Update konnte ich Dateien wie' MyService31.xsd ... MyService33.xsd' sehen – Abhijeet

Verwandte Themen