سؤال

خلفية: أريد إنشاء برنامج التحويل البرمجي VB مخصص ، يمتد المترجم "الأصلي" ، للتعامل مع سماتي المخصصة لوقت التجميع.

سؤال: بعد أن قمت بإنشاء برنامج التحويل البرمجي المخصص الخاص بي ولدي ملف قابل للتنفيذ قادر على تجميع رمز VB عبر واجهة سطر الأوامر القياسية ، كيف يمكنني دمج هذا المترجم مع Visual Studio IDE؟ (مثل الضغط على "التجميع" أو "البناء" سيستخدم المترجم الخاص بي بدلاً من المترجم الافتراضي).

تعديل: (صححني إذا كنت مخطئًا)

من ردود الفعل هنا ، أرى أن هذا السؤال مروع بعض الشيء ، لذلك سأشرح احتياجاتي وخلفيتي أيضًا: .NET يوفر لنا آلية رائعة تسمى السمات. بقدر ما أفهم ، فإن صنع السمات تطبق سلوكها المقصود على العنصر المنسوب (التجميع ، الوحدة النمطية ، الفئة ، الطريقة ، إلخ) - يجب أن تنعكس السمات عليها. لذا فإن الخدعة الحقيقية هنا تعكس وتطبيق السلوك في المكان الصحيح.

دعنا نأخذ التسلسل على سبيل المثال: نحن نزين فصلًا بسمات قابلة للتسلسل. ثم نمرر مثيلًا للفصل إلى طريقة تسلسل Formatter. ينعكس التنسيق على المثيل ، والتحقق مما إذا كان يحتوي على السمة القابلة للتسلسل ، والتمثيل وفقًا لذلك.

الآن ، إذا فحصنا التزامن ، والأعلام ، والسمات القديمة والكلام ، فإن السؤال الحقيقي هو: من يعكس عليها؟ على الأقل في بعض الحالات ، يجب أن يكون المترجم (و/أو IDE). لذلك ، يبدو أنه إذا كنت أرغب في إنشاء سمات مخصصة تغير سلوك العنصر بغض النظر عن أي مستهلك محدد ، فيجب أن أمد المترجم للتفكير في التجميع.

بالطبع ، هذه ليست رؤيتي الشخصية: الكتاب "سمات .NET"يوفر مثالًا كاملاً لإنشاء سمة مخصصة ومترجم C# مخصص للتفكير في تلك السمة في التجميع (يتم استخدام المثال لتنفيذ" استثناءات فحص على غرار Java ").

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

المحلول

تحقق من "نظرة عامة على MSBuild" في http://msdn.microsoft.com/en-us/library/ms171452.aspx. مشاريع الاستوديو البصرية هي مشاريع MSBUILD. أعتقد أن كل ما عليك فعله هو إجراء تغييرات بسيطة. لم أفعل ذلك لمرجم ، لكنني فعلت ذلك مع Ilmerge بعد التجميع ويعمل بشكل رائع. سلس وحتى ممكن لتصحيح التجمعات المدمجة.

نصائح أخرى

الدفع "خاصية BuildAction" و "خاصية CustomTool".

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

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