كيفية تضمين روبي جوهرة في مشروع C# و تتطلب ذلك من جزءا لا يتجزأ من IronRuby السيناريو ؟

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

سؤال

لدي مشروع C# الذي يكون جزءا لا يتجزأ من أحد IronRuby البرنامج.المشروع (بما في ذلك بلدي روبي النصي) ترجمة إلى .exe ملف في Visual Studio 2010 للتوزيع.أنا باستخدام نمط مماثل هذا المصطلح على IronRuby النصي: http://pastebin.com/NKes1cyc (و جيمي Schementi يذهب إلى المزيد من التفاصيل هنا: http://blog.jimmy.schementi.com/2009/12/ironruby-rubyconf-2009-part-35.html).

مشكلتي:أود أن تضمين جوهرة (json_pure) في C# الجمعية دعوة من روبي النصي.

بعض الموارد التي وجدتها:

  1. في JRuby يمكنك بسهولة مجموعة الأحجار الكريمة في وعاء الملف ثم ببساطة تتطلب جرة ملف في وقت التشغيل - http://blog.nicksieger.com/articles/2009/01/10/jruby-1-1-6-gems-in-a-jar

  2. على irpack أداة (في http://github.com/kumaryu/irpack) قادر على تجميع روبي إلى .exe (أعتقد أنه حيوي يخلق يجمع مشروع C#) حين التضمين روبي مكتبة القياسية.ولكن يبدو أنه هو فقط تضمين بنيت قبل IronRuby .dlls لا روبي .rb الملفات.نهج تستخدم هذه الأداة سوف تعمل إذا كان بإمكاني معرفة كيفية تجميع روبي الملفات المصدر في .dll.

كيف يمكنني تضمين IronRuby جوهرة في C# الجمعية (أو تجميع IronRuby جوهرة إلى .dll)?

تحرير:

صفحة 472 من IronRuby في العمل ("باستخدام المكتبات الخارجية") يشرح كيفية يتطلب معيار روبي المكتبات من خلال جزءا لا يتجزأ من روبي الملف.فإنه ينطوي على إضافة مجلد(ق) إلى وقت مسارات البحث مجموعة على النحو التالي (تحرير الإيجاز والوضوح):

ScriptEngine engine = IronRuby.Ruby.CreateEngine();
var searchPaths = engine.GetSearchPaths().Concat(new[] 
{
    "C:\\Program Files (x86)\\IronRuby 1.1\\Lib\\ruby\\1.9.1",
    "C:\\Program Files (x86)\\IronRuby 1.1\\Lib\\ironruby"
});
engine.SetSearchPaths(searchPaths)

هذا النهج يفترض المضيف آلة IronRuby تثبيت, ولكن أريد أن تضمين روبي الملفات (من جوهرة) في الجمعية حتى يمكن تشغيله دون IronRuby المثبتة مسبقا.

تحرير 2 (مزيد من البحث):

القراءة من خلال التعليمات البرمجية المصدر من irpack أداة المشار إليها أعلاه, أنا لاحظت أن Kumaryu هو تضمين الموارد في الجمعية عبر النظام.IO.التعبئة والتغليف.الطبقة حزمة ثم تمرير الحزمة إلى الدعوة إلى msbuild (انظر https://github.com/kumaryu/irpack/blob/master/lib/irpack/packager.rb).ربما بعض مزيد من البحوث في التعبئة والتغليف الملفات إلى ملف قابل للتنفيذ من شأنها أن تؤدي إلى حل.المشكلة أرى أن روبي الملفات في جوهره require أخرى روبي الملفات...يمكن أن روبي الملف في تجميع حزمة require أخرى روبي الملفات في نفس الحزمة ؟

تحرير 3:

أنا لم أحصل على أي إجابة حتى الآن, ولكن سأكون مهتما لسماع أي ملاحظات ، حتى لو كان مجرد ارتباط أو اقتراح حول أن ننظر فيها.أنا جديدة على msbuild ، والوثائق هي كبيرة جدا.أولية ويب البحث عن "msbuild تضمين حزمة zip" لم تكشف أي شيء ذات الصلة.

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

المحلول

تتطلب طريقة التي يمكن تجاوزها مثل أي طريقة روبي.أعتقد أن هذا هو كيف الأصلي روبي الأحجار الكريمة حزمة عمل, الأحجار الكريمة ببساطة تجاوز require.

إذا كنت يمكن أن حزمة جوهرة في الخاص بك .exe بطريقة ما ، يمكنك تجاوز require لتحميل من الجمعية.

نصائح أخرى

أنا أعمل مع https://stackoverflow.com/users/2086/mcintyre321 للحصول على مكتبته ملفوفة في C#/IronRuby باستخدام التعبئة والتغليف كود ( https://github.com/rifraf/IronRubyAppPackager#readme ).

هناك بعض الإصلاحات اللازمة في vendorize الخطوة التي هي ذات الصلة إلى الإصدارات الأحدث من روبي وجود جواهر روبي جزءا لا يتجزأ بدلا من تحميلها ، ولكن يجري إحراز تقدم.

رمز له يتطلب 'سلمان' و لدي خدعة لإجبار إلى استخدام روبي التنفيذ بدلا من C-الربط .حتى الملفات.هذا يجب أن يعني أنه سوف يعمل مع IronRuby موافق.سوف يقدم تقريرا أو لا تتردد في الاتصال بي مع المصدر الذي تريد تشغيله.

جرب هذا https://github.com/rifraf/IronRubyAppPackager#readme (أو الانتظار بالنسبة لي أن يقدم مرة أخرى على ما إذا كان يعمل مع المكتبة أحاول أن تضمين)

تقارير:

عملية لقد ذهبت إلى هو...

  1. شوكة submodule جميع المشاريع (IronRubyEmbeddedApps, IronRubyAppPackager, اك Vendorize) من https://github.com/rifraf, و أضاف كل منهم في مقابل الحل.لقد قمت بتحديث جميع المشاريع .NET4 وجعلها مرجعية واحدة أخرى, بدلا من تضمينها .net2 الجمعيات

  2. أعدم Vendorize مزق كل التبعيات/الأحجار الكريمة D:\projects\SomeLibrary\lib_vendor_ عن طريق تشغيل:

    D:\projects\SomeLibrary\lib>ruby -I..\..\Vendorize\lib -rvendorize some_lib.rb

  3. إنشاء مشروع c# في D:\projects\SomeLibrary\lib\_IRPackager_\some_lib.csproj عن طريق تشغيل:

    D:\projects\SomeLibrary\lib>ruby -I..\..\IronRubyAppPackager\lib\IRPackager.rb some_lib.rb

  4. وأضاف some_lib.csproj إلى الحل ، ترقيتها إلى .net4 و المراجع الثابتة

  5. عند هذه النقطة يمكنك تشغيل المشروع .صافي مستقل ،
var Ruby = new EmbeddedRuby();
Ruby.Decoder = new Program.GZipDecoder();
Ruby.Mount("App");
Ruby.Run("gocardless.rb");

و نجحت!رائعة كنت اعتقد!

في الواقع في هذه المرحلة اكتشفت أنه قد فشل في الخطوة 2 إلى Vendorize كل واحد مطلوب المكتبة.Vendorize يعمل عن طريق اعتراض require المكالمات ثم حفظ تسمى ملفات rb إلى _Vendor_ - إذا require لا يتم تنفيذ (حتى تشغيل جميع الاختبارات و الأمل اختبار التغطية 100%) لن يتم انتقاؤها.

لسبب ما لم يكن التقاط واحدة من الملفات المطلوبة ، حتى ولو كان هناك تتطلب.في النهاية, أنا يدويا إنشاء محتوى بائع الدليل عن طريق نسخ مكتبتي ، باستخدام bundle install --deployment الأوامر.كرر الخطوة 3 و 4 و أنتهي...أليس كذلك ؟

لا يمكنني الحصول على بعض الخطأ عن no such file to load -- json/pure عند تشغيل المولدة من المشروع - أعتقد أن هذا هو أن تفعل شيئا مزيج من ironruby عدم وجود الأم سلمان التنفيذ ، يقوم دليل vendorizing و أن يصلح الأمور في عدة نقاط اليوم.

أن تختتم هذه الطريقة جدا جدا ما يقرب من يعمل العمل إذا كانت المكتبة الخاصة بك و تبعيات العمل مع ironruby بشكل صحيح, يمكنك الحصول على vendorize للعمل بشكل صحيح.

أنا التخلي و ترقية المكتبة إلى c# بالطريقة القديمة.

تحرير:كما هو مذكور أدناه ، rifraf يساعدني ويبحث في تحديث الأدوات التي كنت تستخدم.مشاهدة t(له) الفضاء!

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