لماذا يتم تعريف هذه المهمة Albacore ، في الفصل ، لا تعمل؟
سؤال
لقد وضعت هذا الفصل معًا ، لكنه لا يعمل على تشغيل بناء بالفعل. لقد أدخلت بعض عمليات التسجيل الأخرى ولا يتم رفع أي أخطاء. أعلن نفسي كأووب على روبي ، لذا آمل أن يتمكن بعض خبير روبي الجميل من اكتشاف أي خطأ غبي لدي!
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 ، يدويًا.