2010-11-29 10 views
0

Tech: Visual Studio 2010, Visual Studio Visualisation & Modélisation SDKdslVersion - Comment incrémenter mais toujours supporter les anciennes versions?

Nous avons un DSL Visual Studio 2010 commercial, lorsque nous publierons une nouvelle version, nous voulons augmenter le numéro de version. J'ouvre le DslDefinition.dsl et met à jour le numéro de version selon les besoins, puis fais un Transformer tous les modèles afin que les changements soient reflétés. Le DslPackage 'source.extension.vsixmanifest' est mis à jour correctement et affiche le nouveau numéro de version. Le problème est cependant que lorsque quelqu'un ouvre un modèle créé à partir de la version 1.0.0.0 avec la version mise à jour 1.0.0.1 alors ils ne peuvent pas ouvrir le modèle, la raison semble être que le 'dslVersion' dans le * Le fichier .diagram est mis à 1.0.0.0 qui a été obsolète, je peux corriger en mettant manuellement à jour la version de dslVersion, mais il semble qu'il n'y ait aucun moyen de définir une gamme de versions supportées.

Y at-il un correctif pour cela?

Répondre

1

J'ai résolu ce problème en remplaçant la méthode 'CheckVersion' qui se trouve dans la classe '* SerializationHelper'. Ma mise en œuvre est ci-dessous.

 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); 
       } 
      } 
     } 
    } 
Questions connexes