2010-11-29 15 views
0

Tech: Visual Studio 2010, Visual Studio Visualisierung & Modellierung SDKdslVersion - Wie erhöht man, aber unterstützt immer noch ältere Versionen?

Wir haben ein kommerzielles Visual Studio 2010 DSL, wenn wir eine neue Version veröffentlichen wir die Versionsnummer erhöhen mögen. Ich öffne die DslDefinition.dsl und aktualisiere die Versionsnummer wie erforderlich und mache dann ein Transformiere alle Vorlagen, damit die Änderungen reflektiert werden. Das DslPackage 'source.extension.vsixmanifest' wird gut aktualisiert und zeigt die neue Versionsnummer an.

Das Problem ist jedoch, dass wenn jemand ein Modell öffnet, das von Version 1.0.0.0 mit der aktualisierten Version 1.0.0.1 erstellt wurde, dann kann es das Modell nicht öffnen, der Grund scheint zu sein, dass die 'dslVersion' im * .diagram-Datei ist auf 1.0.0.0 festgelegt, die veraltet ist, kann ich beheben, indem Sie die dslVersion manuell aktualisieren, aber es scheint keine Möglichkeit zu geben, einen unterstützten Versionsbereich festzulegen.

Gibt es eine Lösung dafür?

Antwort

1

Ich habe dieses Problem durch Überschreiben der 'CheckVersion' Methode, die in der Klasse '* SerializationHelper' sitzt, gelöst. Meine Implementierung ist unten.

 partial class ProductSerializationHelper 
    { 
     protected override void CheckVersion(Microsoft.VisualStudio.Modeling.SerializationContext serializationContext, System.Xml.XmlReader reader) 
     { 
      #region Check Parameters 
      global::System.Diagnostics.Debug.Assert(serializationContext != null); 
      if (serializationContext == null) 
       throw new global::System.ArgumentNullException("serializationContext"); 
      global::System.Diagnostics.Debug.Assert(reader != null); 
      if (reader == null) 
       throw new global::System.ArgumentNullException("reader"); 
      #endregion 

      global::System.Version expectedVersion = new global::System.Version("2.5.0.0"); 
      string dslVersionStr = reader.GetAttribute("dslVersion"); 
      if (dslVersionStr != null) 
      { 
       try 
       { 
        global::System.Version actualVersion = new global::System.Version(dslVersionStr); 

// #### THIS IS WHERE I CHANGED FROM '!=' to '>' 
        if (actualVersion > expectedVersion) 
        { 
         ProductSerializationBehaviorSerializationMessages.VersionMismatch(serializationContext, reader, expectedVersion, actualVersion); 
        } 
       } 
       catch (global::System.ArgumentException) 
       { 
        ProductSerializationBehaviorSerializationMessages.InvalidPropertyValue(serializationContext, reader, "dslVersion", typeof(global::System.Version), dslVersionStr); 
       } 
       catch (global::System.FormatException) 
       { 
        ProductSerializationBehaviorSerializationMessages.InvalidPropertyValue(serializationContext, reader, "dslVersion", typeof(global::System.Version), dslVersionStr); 
       } 
       catch (global::System.OverflowException) 
       { 
        ProductSerializationBehaviorSerializationMessages.InvalidPropertyValue(serializationContext, reader, "dslVersion", typeof(global::System.Version), dslVersionStr); 
       } 
      } 
     } 
    }