كيف يمكنني الحصول على إصدار ClickOnce Publish ليتوافق مع إصدار ملف AssemblyInfo.cs؟

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

سؤال

في كل مرة أقوم بنشر التطبيق فيها انقر مرة واحدة أحصل عليه لتحديث رقم المراجعة بواحد.هل هناك طريقة للحصول على هذا التغيير تلقائيًا لتغيير رقم الإصدار في ملف AssemblyInfo.cs (جميع تقارير الأخطاء لدينا تنظر إلى إصدار التجميع)؟

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

المحلول

نحن نستخدم Team Foundation Server Team Build وقمنا بإضافة كتلة إلى TFSBuild.proj AfterCompile الهدف لتشغيل ClickOnce النشر برقم الإصدار المفضل لدينا:

<MSBuild Projects="$(SolutionRoot)\MyProject\Myproject.csproj"
         Properties="PublishDir=$(OutDir)\myProjectPublish\;
                     ApplicationVersion=$(PublishApplicationVersion);
                     Configuration=$(Configuration);Platform=$(Platform)"
         Targets="Publish" />

ال PublishApplicationVersion يتم إنشاء المتغير بواسطة مهمة MSBuild مخصصة لاستخدام رقم TFS Changeset، ولكن يمكنك استخدامه المهمة المخصصة الخاصة بك أو الحل الموجود للحصول على رقم الإصدار من ملف AssemblyInfo.

يمكن إجراء ذلك نظريًا في ملف المشروع الخاص بك (وهو مجرد برنامج نصي لـ MSBuild على أي حال)، لكنني أوصي بعدم النشر من جهاز مطور.

أنا متأكد من أخرى التكامل المستمر يمكن لحلول (CI) التعامل مع هذا الأمر بالمثل.


يحرر: آسف، حصلت على سؤالك إلى الوراء.يجب أن يكون الانتقال من رقم إصدار ClickOnce إلى ملف AssemblyInfo ممكنًا.أنا متأكد من أن مهام مجتمع MSBuild (الرابط أعلاه) لديها مهمة لتحديث ملف AssemblyInfo، لذا ستحتاج فقط إلى مهمة مخصصة لسحب رقم الإصدار من ملف ClickOnce XML للتكوين.

ومع ذلك، قد تفكر أيضًا في تغيير تقرير الأخطاء الخاص بك ليشمل إصدار النشر ClickOnce أيضًا:

if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
    Debug.WriteLine(System.Deployment.Application.ApplicationDeployment.
                                                        CurrentDeployment.CurrentVersion);
}

نصائح أخرى

لقد قمت بتنفيذ هذا مؤخرًا باستخدام بعض المهام المخصصة.إحدى المشكلات التي وجدتها أثناء تنفيذ ذلك باستخدام ClickOnce هي أن جميع ملفات DLL الخاصة بك يتم تحديثها.يؤدي هذا إلى قيام تحديث ClickOnce بتنزيل جميع ملفات التطبيق في كل تحديث.يتجاوز هذا الميزات الرائعة لنشر ClickOnce حيث تتم إعادة تنزيل الملفات المعدلة فقط في التحديث.

مجرد شيء يجب التفكير فيه عند تنفيذ شيء كهذا باستخدام ClickOnce.

خطوات:

  1. استخدم رقم الإصدار المتزايد الخارجي (إذا كنت تستفيد من خادم التكامل المستمر مثل CruiseControl.NET، فإنه يأتي من تسمية البناء).
  2. استخدم GlobalVersionInfo.cs (رابط الملف المشار إليه بواسطة جميع المشاريع في الحل الخاص بك) للاحتفاظ بالإصدار الحالي وتحديثه عند الإنشاء باستخدام مهمة AssemblyInfo من مجتمع MSBuild مهام.
  3. النصي بركه أداة سطر الأوامر من .NET SDK لتحديث بيان ClickOnce، باستخدام نفس الإصدار (راجع ملف -v و -mv مفاتيح).

راجع للشغل، المكافأة الرائعة هي أنه عندما تقوم تلقائيًا بنشر إصدار نشر ClickOnce أحدث عبر البرنامج النصي للتكامل، إذا قمت أيضًا بتحديد الحد الأدنى من الإصدار إلى mage.exe (نفس الإصدار)، فسيتم تحديث كل مستخدم تلقائيًا في التطبيق التالي يطلق.

ربما ستحتاج إلى إنشاء جزء من التعليمات البرمجية الذي يقوم بتحديث AssemblyInfo.cs وفقًا لرقم الإصدار المخزن في ملف .csproj.(يتم تخزين إصدار نشر ClickOnce داخل علامة XML.)

يمكنك بعد ذلك تغيير ملف .csproj لتشغيل هذا الجزء من التعليمات البرمجية عند تنفيذ إنشاء النشر|الإصدار.قام أعضاء MSBuild بالتدوين حول كيفية تنفيذ إجراءات مخصصة أثناء أنواع بناء معينة؛افحص ال مدونة فريق MSBuild.

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