Pregunta

Tech : Visual Studio 2010, Visual Studio Visualización y Modelado SDK

Tenemos un comercial de Visual Studio 2010 DSL, cuando nos liberamos una nueva versión queremos incrementar el número de versión. Abro la DslDefinition.dsl y actualizar el número de versión según sea necesario y luego hacer una transformación todas las plantillas para que los cambios se reflejan. El DslPackage 'source.extension.vsixmanifest' consigue bien actualizada y muestra el nuevo número de versión.

El problema es, sin embargo es que cuando alguien abre un modelo creado a partir de la versión 1.0.0.0 con la versión actualizada 1.0.0.1, entonces no puede abrir el modelo, la razón parece ser que el 'dslVersion' en el *. archivo de esquema se establece en 1.0.0.0 que ha quedado anticuado, puedo solucionar mediante la actualización manualmente el dslVersion pero parece que no hay manera de establecer un rango versión compatible.

¿Hay alguna solución para esto?

¿Fue útil?

Solución

Me han resuelto este problema reemplazando el método 'CheckVersion' que se encuentra en la clase '* SerializationHelper'. Mi aplicación se encuentra por debajo.

     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);
                }
            }
        }
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top