سؤال

أثناء عملية إنشاء الإعداد ، أخطط للقيام بما يلي (ضمن أ C# السيناريو):

  1. إقرأ ال AssemblyVersion و AssemblyFileVersion قيم السمة من DLL واحد.
  2. تكرار جميع DLLs و Executables في المشروع وتطبيق تلك النسخة على AssemblyVersion و AssemblyFileVersion قيم السمة.

السؤال الآن هو: كيف تفعل الخطوة 2؟

لقد نجحت في القيام بخطوة 1 ، لكن بالنسبة للخطوة 2 ، لا أرى نقطة بداية حقيقية. ما يجب علي فعله هو استخدام بعض أساليب P/الاستدعاء الأصلية لأن السمات تعدل مباشرة معلومات مورد معلومات الإصدار من DLL/قابلة للتنفيذ.

أي تلميحات على هذا؟

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

المحلول

لماذا لا تقرأ ، أثناء عملية الإنشاء AssemblyVersion و AssemblyFileVersion من DLL ، وحفظه مرة أخرى إلى CSPROJECT الأخرى AssemblyInfo.cs, ، ثم فقط تجميعها؟

في الواقع ، لا أعرف ما إذا كان من الممكن تعديل ملف DLL مباشرة ، دون اللجوء إلى شيء خيالي.

أو بدلاً من ذلك ، تأكد من أن جميع DLLs تشترك AssemblyInfo.cs. يمكنك القيام بذلك عن طريق إضافة AssemblyInfo.cs كـ "إضافة رابط" عند إضافة عنصر جديد في Csproject. وبهذه الطريقة عندما تقوم بتجميع ، ستشارك جميع DLLs نفس الشيء AssemblyInfo.cs, ، وبالتالي إخراج نفسه AssemblyVersion.

نصائح أخرى

في حالتي ، قمت بإنشاء قالب T4 لتغيير التحويل التجميلي والتجميع. اتصلت بـ template assembly.tt ، وجعلته ملفًا مرتبطًا (عند إضافته ، اختر إضافة رابط ، بدلاً من إضافة). جميع تجميعاتي تسحب في ملف Assembly.tt المرتبط.

يمكنك بعد ذلك تشغيل قالب T4 من موقع واحد وسيقوم بتحديث جميع عمليات التحمل والتجميع. ليس عليك الاتصال بـ File AssemblyInfo.cs حتى يتم سحب المعلومات إلى DLLs الخاصة بك.

رمز ملف assembly.tt هو:

<#@ template language="C#" hostspecific="true" #>
// 
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
// 

using System.Reflection;

[assembly: AssemblyVersion("4.<#= this.RevisionYear #>.<#= this.RevisionNumber #>.<#= this.RevisionTime #>")]
[assembly: AssemblyFileVersion("4.<#= this.RevisionYear #>.<#= this.RevisionNumber #>.<#= this.RevisionTime #>")]
<#+
    int RevisionYear = DateTime.UtcNow.Year;
    int RevisionNumber = (int)(DateTime.UtcNow - new DateTime(DateTime.UtcNow.Year,1,1)).TotalDays;
    int RevisionTime = (int)(DateTime.UtcNow - new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day)).TotalMinutes;
#>

سيكون إخراج قالب T4 أعلاه:

// 
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
// 

using System.Reflection;

[assembly: AssemblyVersion("4.2016.284.1066")]
[assembly: AssemblyFileVersion("4.2016.284.1066")]

إذا كان لديك إمكانية الوصول إلى المصادر ، خذ نصيحة من Graviton

إذا لم تقم بذلك ، فقد تكون في ورطة. ربما يمكنك تفكيك مع ildasm وإعادة تجميعها مع Ilasm. ولكن هذا لن ينجح في تجمعات قوية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top