كيف يمكن للمرء مطورين على VS2008 Target .NET 2.0 (ولكن ليس حزمة الخدمة) لتجنب حوادث وقت التشغيل؟

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

سؤال

لذلك ، أريد ترقية فريق التطوير الخاص بي إلى VS2008. كمؤسسة ، لم نطرح وقت التشغيل 3.5 حتى الآن.

من بعض القراءة ، يبدو أن تثبيت VS2008 سيمنحك تلقائيًا .NET 2.0 SP1 ، والذي يحتوي على بعض واجهات برمجة التطبيقات الجديدة ، وعندما تستهدف وقت التشغيل 2.0 ، فإنه سيفترض 2.0 SP1.

ولكن إذا لم يتم طرح SP1 إلى مستخدمينا ، فسيؤدي ذلك إلى استراحات وقت التشغيل.

  1. هل هناك على أي حال أن يكون لديك مقابل Dotnet 2.0 (وليس SP1)؟
  2. هل هناك أي حلول أخرى لهذه المشكلة حتى لا يستخدم المطورون واجهات برمجة التطبيقات التي تجمع وتشغيلها بشكل جيد محليًا ولكنها تفجر في الإنتاج؟

أرى أن FXCOP لديه فحص لهذا ولكن يجب أن يكون هناك حل أكثر عزلًا لهذه المشكلة.

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

المحلول

يمكن أن يكون هذا صعبًا أو سهلًا. ذهبنا كلا الطريقين:

  1. الطريقة السهلة: إنشاء خادم بناء يحتوي فقط على .NET 2.0. أتمتة البناء لتشغيلها عند تسجيل الوصول (نستخدم CruiseControl.net). سيتعين عليك استخدام MSBuild من عروض الأوامر لبناء المشاريع.

  2. بالنسبة للآلات التي تحتوي على 3.5 يتم تثبيت العديد من أدوات MSBuild يتم استبدالها حتى عند تشغيل MSBuild من دليل .NET 2.0 Framework. لتجنب ذلك ، يجب عليك إنشاء تطبيق يجبر الاستخدام المستمر لوقت التشغيل .NET 2.0 فقط. هذا ليس سهلا. نقوم بتحميل المشاريع مباشرة ونستدعي البناء باستخدام Microsoft.build.* Framework. هذا وحده لا يزال غير كاف. يجب عليك تثبيت التجميعات التي تريد استخدامها في ملف .Config الخاص بك:

    u003Cconfiguration>u003Cruntime>u003CassemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">u003CdependentAssembly>u003CassemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>u003CbindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="2.0.0.0"/>u003C/dependentAssembly>u003CdependentAssembly>u003CassemblyIdentity name="Microsoft.Build.Engine" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>u003CbindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="2.0.0.0"/>u003C/dependentAssembly> ... إلخ ...u003C/assemblyBinding>u003C/runtime>u003C/configuration>

راجع للشغل ، قد يكون لديك أيضًا مشكلة في المشاريع التي تم إنشاؤها حديثًا في VS2008 وتتوقع خاصية تسمى "MSBuildToolSpath" والتي يجب تعريفها. يمكنك تحديد ذلك على سطر الأوامر في حالة استخدام MSBuild ، أو تحديده بشكل برمجي إذا كان يستخدم الخيار الثاني:

engine.GlobalProperties.SetProperty( "MSBuildToolsPath", msbuildPath );

نصائح أخرى

ربما عنصر تكوين AudressedRuntime يستحق إلقاء نظرة على. لكنني لست متأكدًا مما إذا كان هذا يمكن أن يساعد.

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