DSLVersion - كيفية الزيادة ولكن لا تزال تدعم الإصدارات القديمة؟

StackOverflow https://stackoverflow.com/questions/4302747

سؤال

تقنية: Visual Studio 2010 ، Visual Studio Visualization & Modeling SDK

لدينا Visual Studio 2010 DSL ، عندما نصدر إصدارًا جديدًا نريد زيادة رقم الإصدار. أفتح dsldefinition.dsl وأحدث رقم الإصدار كما هو مطلوب ثم أقوم بتحويل جميع القوالب بحيث تنعكس التغييرات. يتم تحديث DSLPackage 'Source.Extension.VsixManifest "بشكل جيد ويظهر رقم الإصدار الجديد.

ومع ذلك ، فإن المشكلة هي أنه عندما يفتح شخص ما نموذجًا تم إنشاؤه من الإصدار 1.0.0.0 مع الإصدار 1.0.0.1 المحدث تم تعيينه على 1.0.0.0 الذي قُدم ، يمكنني إصلاحه عن طريق تحديث DSLVersion يدويًا ولكن يبدو أنه لا توجد طريقة لتعيين نطاق إصدار مدعوم.

هل هناك أي حل لهذا؟

هل كانت مفيدة؟

المحلول

لقد قمت بحل هذه المشكلة عن طريق تجاوز طريقة "Crockversion" التي تقع في فئة "*SerializationHelper". تنفيذي أدناه.

     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);
                }
            }
        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top