DSLVersion - كيفية الزيادة ولكن لا تزال تدعم الإصدارات القديمة؟
-
29-09-2019 - |
سؤال
تقنية: 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);
}
}
}
}
لا تنتمي إلى StackOverflow