لماذا يتم تعريف هذه المهمة Albacore ، في الفصل ، لا تعمل؟

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

  •  28-09-2019
  •  | 
  •  

سؤال

لقد وضعت هذا الفصل معًا ، لكنه لا يعمل على تشغيل بناء بالفعل. لقد أدخلت بعض عمليات التسجيل الأخرى ولا يتم رفع أي أخطاء. أعلن نفسي كأووب على روبي ، لذا آمل أن يتمكن بعض خبير روبي الجميل من اكتشاف أي خطأ غبي لدي!

require 'rubygems'
require 'albacore'
require 'albacore/support/albacore_helper'
require 'rake'
require 'rake/tasklib'

class Build_Assembly
  def build(build_properties)
    puts 'doing an assembly build'

    msbuild :compile do |msb|
      puts 'running build'

      msb.properties :configuration => :Debug
      msb.targets :Clean, :Build
      msb.solution = build_properties.solution_file_location
      msb.execute
    end
  end
end

لقد حاولت أيضًا استخدام: بناء بدلاً من: ترجمة.

لقد رأيت Albacore يعمل وأدرك قوة ذلك ، فقط بحاجة إلى الحصول على مهاراتي قليلاً على أمل

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

المحلول

ال msbuild الطريقة التي تتصل بها لا تنفذ أبدًا لأن Albacore هو مجموعة من مهام Rake ، و msbuild هي إحدى تلك المهام التي تريد تنفيذها بواسطة Rake ، وليس مباشرة بطريقة أخرى ، على الرغم من أنه يمكن القيام بها.

الدعوة msb.execute داخل do |msb| ... end لن تنفذ الكتلة المهمة ، لأن هذه الكتلة لا يتم تقييمها حتى يتم تنفيذ مهمة Rake نفسها.

لديك بعض الخيارات للحصول على هذا العمل. الخيار رقم 1 هو الاستخدام الموصى به والمقصود من Albacore. أوصي بشدة باستخدام Rake و Albacore حيث كان من المفترض أن تستخدم ، حتى لا تواجه مشاكل في المستقبل. سيعمل الخياران رقم 2 و #3 في الوقت الحالي ، لكن التغييرات في واجهة برمجة تطبيقات Rake أو Albacore يمكنها كسرها دون إشعار. بالطبع ، يمكنك استخدامها كما تريد أو تحتاج.

1. تحويل هذا إلى برنامج نصي أشعل النار بدلاً من الفصل والطريقة

# rakefile.rb
require 'albacore'

task :default => [:compile]

msbuild :compile do |msb|
  puts 'running build'
  msb.properties :configuration => :Debug
  msb.targets :Clean, :Build
  msb.solution = build_properties.solution_file_location
end

ثم قم بتشغيل هذا عبر أشعل النار عن طريق الاتصال rake من سطر الأوامر ، في نفس المجلد مثل rakefile.rb

2. استخدام Task[:compile].execute لتنفيذ المهمة ضمن طريقتك.

منذ msbuild المكالمة هي مهمة أشعل النار وليست طريقة قياسية تنفذ رمزها على الفور ، يجب عليك تنفيذ المهمة التي تم إنشاؤها خلف الكواليس يدويًا. هذا سيجعل رمزك الحالي يعمل ، لكنه ليس الطريقة الموصى بها في العمل مع مهام Rake.

require 'rubygems'
require 'albacore'
require 'albacore/support/albacore_helper'
require 'rake'
require 'rake/tasklib'

class Build_Assembly

  def build(build_properties)
    puts 'doing an assembly build'

    msbuild :compile do |msb|
      puts 'running build'
      msb.properties :configuration => :Debug
      msb.targets :Clean, :Build
      msb.solution = build_properties.solution_file_location
    end

    Task[:compile].execute
  end
end

3. استخدم MSBuild الفصل مباشرة ، بدلا من msbuild مهمة أشعل النار

إذا كنت بحاجة حقًا إلى الاتصال بـ MSBuild من داخل الطريقة ، فيجب عليك تجنب استخدام مهمة MSBuild والاتصال بفئة MSBuild مباشرة. هذا يتيح لك العمل مباشرة مع الرمز الذي تريده ... لا مزيد من المرور من خلال Rake للاتصال بشيء يمكنك الاتصال به مباشرة

require 'rubygems'
require 'albacore'
require 'albacore/support/albacore_helper'
require 'rake'
require 'rake/tasklib'

class Build_Assembly

  def build(build_properties)
    puts 'doing an assembly build'

    msb = MSBuild.new
    puts 'running build'
    msb.properties :configuration => :Debug
    msb.targets :Clean, :Build
    msb.solution = build_properties.solution_file_location
    msb.execute
  end
end

هذا هو السيناريو الوحيد الذي تحتاج فيه إلى الاتصال. Execute ، يدويًا.

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