ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

CAD ایپلی کیشنز کے لیے پلگ ان تیار کرتے وقت (میرے معاملے میں یہ ہیں AutoCAD، Revit اور Renga) وقت کے ساتھ ساتھ، ایک مسئلہ ظاہر ہوتا ہے - پروگراموں کے نئے ورژن جاری کیے جاتے ہیں، ان کے API میں تبدیلیاں اور پلگ ان کے نئے ورژن بنانے کی ضرورت ہوتی ہے۔

جب آپ کے پاس صرف ایک پلگ ان ہے یا آپ ابھی بھی اس معاملے میں خود سکھائے گئے ابتدائی ہیں، تو آپ آسانی سے پروجیکٹ کی ایک کاپی بنا سکتے ہیں، اس میں ضروری جگہوں کو تبدیل کر سکتے ہیں اور پلگ ان کا نیا ورژن جمع کر سکتے ہیں۔ اس کے مطابق، کوڈ میں بعد میں ہونے والی تبدیلیوں سے مزدوری کے اخراجات میں متعدد اضافہ ہوگا۔

جیسا کہ آپ تجربہ اور علم حاصل کرتے ہیں، آپ کو اس عمل کو خودکار کرنے کے کئی طریقے ملیں گے۔ میں اس راستے پر چل پڑا اور میں آپ کو بتانا چاہتا ہوں کہ میں نے کیا کیا اور یہ کتنا آسان ہے۔

سب سے پہلے، ایک ایسا طریقہ دیکھتے ہیں جو واضح ہے اور جو میں نے ایک طویل عرصے سے استعمال کیا ہے۔

پروجیکٹ فائلوں کے لنکس

اور ہر چیز کو سادہ، بصری اور قابل فہم بنانے کے لیے، میں پلگ ان ڈویلپمنٹ کی ایک خلاصہ مثال کا استعمال کرتے ہوئے ہر چیز کو بیان کروں گا۔

آئیے ویژول اسٹوڈیو کھولیں (میرے پاس کمیونٹی 2019 ورژن ہے۔ اور ہاں - روسی میں) اور ایک نیا حل بنائیں۔ آئیے اسے بلائیں۔ MySuperPluginForRevit

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

ہم ورژن 2015-2020 کے لیے Revit کے لیے ایک پلگ ان بنائیں گے۔ لہذا، آئیے حل (نیٹ فریم ورک کلاس لائبریری) میں ایک نیا پروجیکٹ بنائیں اور اسے کال کریں۔ MySuperPluginForRevit_2015

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

ہمیں Revit API میں لنکس شامل کرنے کی ضرورت ہے۔ بلاشبہ، ہم مقامی فائلوں کے لنکس شامل کر سکتے ہیں (ہمیں تمام ضروری SDKs یا Revit کے تمام ورژن انسٹال کرنے کی ضرورت ہوگی)، لیکن ہم فوری طور پر صحیح راستے پر چلیں گے اور NuGet پیکیج کو جوڑیں گے۔ آپ کو کافی پیکجز مل سکتے ہیں، لیکن میں اپنا استعمال کروں گا۔

پیکیج کو جوڑنے کے بعد، آئٹم پر دائیں کلک کریں "حوالہ جات"اور آئٹم کو منتخب کریں"packages.config کو PackageReference میں منتقل کریں...»

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

اگر اچانک اس مقام پر آپ گھبرانے لگیں، کیونکہ پیکج پراپرٹیز ونڈو میں کوئی اہم چیز نہیں ہوگی۔مقامی طور پر کاپی کریں۔"، جسے ہمیں یقینی طور پر قدر پر سیٹ کرنے کی ضرورت ہے۔ جھوٹی، پھر گھبرائیں نہیں - پروجیکٹ والے فولڈر میں جائیں، آپ کے لیے آسان ایڈیٹر میں .csproj ایکسٹینشن کے ساتھ فائل کھولیں (میں Notepad++ استعمال کرتا ہوں) اور وہاں ہمارے پیکیج کے بارے میں اندراج تلاش کریں۔ وہ اب اس طرح نظر آتی ہے:

<PackageReference Include="ModPlus.Revit.API.2015">
  <Version>1.0.0</Version>
</PackageReference>

اس میں ایک پراپرٹی شامل کریں۔ رن ٹائم. یہ اس طرح نکلے گا:

<PackageReference Include="ModPlus.Revit.API.2015">
  <Version>1.0.0</Version>
  <ExcludeAssets>runtime</ExcludeAssets>
</PackageReference>

اب، ایک پروجیکٹ کی تعمیر کرتے وقت، پیکیج سے فائلوں کو آؤٹ پٹ فولڈر میں کاپی نہیں کیا جائے گا.
آئیے مزید آگے بڑھتے ہیں - آئیے فوری طور پر تصور کریں کہ ہمارا پلگ ان Revit API سے کچھ استعمال کرے گا، جو وقت کے ساتھ ساتھ تبدیل ہوا ہے جب نئے ورژن جاری کیے گئے ہیں۔ ٹھیک ہے، یا ہمیں صرف Revit کے ورژن کے لحاظ سے کوڈ میں کچھ تبدیل کرنے کی ضرورت ہے جس کے لیے ہم پلگ ان بنا رہے ہیں۔ کوڈ میں اس طرح کے اختلافات کو حل کرنے کے لیے، ہم مشروط تالیف کی علامتیں استعمال کریں گے۔ پروجیکٹ کی خصوصیات کو کھولیں، "ٹیب" پر جائیں۔اسمبلی"اور میدان میں"مشروط تالیف کا اشارہ"چلو لکھتے ہیں R2015.

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

نوٹ کریں کہ علامت کو ڈیبگ اور ریلیز کنفیگریشن دونوں کے لیے شامل کیا جانا چاہیے۔

ٹھیک ہے، جب ہم پراپرٹیز ونڈو میں ہوتے ہیں، ہم فوراً "ٹیب" پر جاتے ہیں۔درخواست"اور میدان میں"پہلے سے طے شدہ نام کی جگہ» لاحقہ ہٹا دیں۔ _2015تاکہ ہمارا نام کی جگہ ہمہ گیر اور اسمبلی کے نام سے آزاد ہو:

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

میرے معاملے میں، حتمی مصنوعات میں، تمام ورژن کے پلگ ان ایک فولڈر میں ڈالے جاتے ہیں، لہذا میرے اسمبلی کے نام فارم کے لاحقے کے ساتھ ہی رہتے ہیں۔ _20хх. لیکن آپ اسمبلی کے نام سے لاحقہ بھی ہٹا سکتے ہیں اگر سمجھا جاتا ہے کہ فائلیں مختلف فولڈرز میں موجود ہیں۔

آئیے فائل کوڈ پر جائیں۔ Class1.cs اور Revit کے مختلف ورژنز کو مدنظر رکھتے ہوئے وہاں کچھ کوڈ کی تقلید کریں:

namespace MySuperPluginForRevit
{
    using Autodesk.Revit.Attributes;
    using Autodesk.Revit.DB;
    using Autodesk.Revit.UI;

    [Regeneration(RegenerationOption.Manual)]
    [Transaction(TransactionMode.Manual)]
    public class Class1 : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
#if R2015
            TaskDialog.Show("ModPlus", "Hello Revit 2015");
#elif R2016
            TaskDialog.Show("ModPlus", "Hello Revit 2016");
#elif R2017
            TaskDialog.Show("ModPlus", "Hello Revit 2017");
#elif R2018
            TaskDialog.Show("ModPlus", "Hello Revit 2018");
#elif R2019
            TaskDialog.Show("ModPlus", "Hello Revit 2019");
#elif R2020
            TaskDialog.Show("ModPlus", "Hello Revit 2020");
#endif
            return Result.Succeeded;
        }
    }
}

میں نے فوری طور پر اوپر والے ورژن 2015 کے Revit کے تمام ورژنز (جو لکھنے کے وقت دستیاب تھے) کو مدنظر رکھا اور فوری طور پر مشروط تالیف کی علامتوں کی موجودگی کو بھی مدنظر رکھا، جو ایک ہی ٹیمپلیٹ کا استعمال کرتے ہوئے بنائے گئے ہیں۔

آئیے اہم بات کی طرف چلتے ہیں۔ ہم اپنے حل میں ایک نیا پروجیکٹ بناتے ہیں، صرف Revit 2016 کے پلگ ان کے ورژن کے لیے۔ ہم اوپر بیان کردہ تمام مراحل کو بالترتیب دہراتے ہیں، نمبر 2015 کو نمبر 2016 سے بدل دیتے ہیں۔ لیکن فائل Class1.cs نئے پروجیکٹ سے حذف کریں۔

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

مطلوبہ کوڈ کے ساتھ فائل کریں - Class1.cs - ہمارے پاس یہ پہلے ہی موجود ہے اور ہمیں صرف ایک نئے پروجیکٹ میں اس کا لنک داخل کرنے کی ضرورت ہے۔ روابط داخل کرنے کے دو طریقے ہیں:

  1. لمبی - پروجیکٹ پر دائیں کلک کریں اور منتخب کریں "شامل کریں->موجودہ عنصرکھلنے والی ونڈو میں مطلوبہ فائل تلاش کریں اور آپشن کے بجائے "شامل کریں"آپشن منتخب کریں"کنکشن کے طور پر شامل کریں۔»

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

  1. مختصر - براہ راست سلوشن ایکسپلورر میں، مطلوبہ فائل (یا یہاں تک کہ فائلیں، یا یہاں تک کہ پورے فولڈرز) کو منتخب کریں اور Alt کی کو دبائے رکھتے ہوئے اسے ایک نئے پروجیکٹ میں گھسیٹیں۔ جیسے ہی آپ گھسیٹیں گے، آپ دیکھیں گے کہ جب آپ Alt کی دبائیں گے، تو ماؤس کا کرسر پلس کے نشان سے تیر میں بدل جائے گا۔
    یوپیڈی: میں نے اس پیراگراف میں تھوڑی سی الجھن پیدا کی ہے - کئی فائلوں کو منتقل کرنے کے لیے آپ کو دبا کر رکھنا چاہیے۔ شفٹ + آلٹ!

طریقہ کار کو انجام دینے کے بعد، ہمارے پاس دوسرے پروجیکٹ میں ایک فائل ہوگی۔ Class1.cs متعلقہ آئیکن کے ساتھ (نیلے تیر):

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

ایڈیٹر ونڈو میں کوڈ میں ترمیم کرتے وقت، آپ یہ بھی منتخب کر سکتے ہیں کہ کوڈ کو کس پراجیکٹ سیاق و سباق میں ظاہر کرنا ہے، جو آپ کو مختلف مشروط تالیف کی علامتوں کے تحت ترمیم شدہ کوڈ کو دیکھنے کی اجازت دے گا:

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

ہم اس اسکیم کا استعمال کرتے ہوئے دوسرے تمام پروجیکٹ (2017-2020) بناتے ہیں۔ لائف ہیک - اگر آپ سولیوشن ایکسپلورر میں فائلوں کو بیس پروجیکٹ سے نہیں بلکہ اس پروجیکٹ سے گھسیٹتے ہیں جہاں وہ پہلے ہی لنک کے طور پر ڈالی گئی ہیں، تو آپ کو Alt کی کو دبانے کی ضرورت نہیں ہے!

بیان کردہ آپشن پلگ ان کا نیا ورژن شامل کرنے کے لمحے تک یا پروجیکٹ میں نئی ​​فائلیں شامل کرنے کے لمحے تک کافی اچھا ہے - یہ سب بہت تکلیف دہ ہو جاتا ہے۔ اور حال ہی میں مجھے اچانک اچانک احساس ہوا کہ ایک پروجیکٹ کے ساتھ اس سب کو کیسے ترتیب دیا جائے اور ہم دوسرے طریقے کی طرف بڑھ رہے ہیں۔

ترتیب کا جادو

یہاں پڑھنا ختم کرنے کے بعد، آپ کہہ سکتے ہیں، "آپ نے پہلا طریقہ کیوں بیان کیا، اگر مضمون فوری طور پر دوسرے کے بارے میں ہے؟!" اور میں نے یہ واضح کرنے کے لیے سب کچھ بیان کیا کہ ہمیں مشروط تالیف کی علامتوں کی ضرورت کیوں ہے اور کن جگہوں پر ہمارے پروجیکٹ مختلف ہیں۔ اور اب یہ ہمارے لیے بالکل واضح ہو گیا ہے کہ ہمیں صرف ایک پروجیکٹ کو چھوڑ کر، ان پراجیکٹس میں کون سے فرق کو لاگو کرنے کی ضرورت ہے۔

اور ہر چیز کو مزید واضح کرنے کے لیے، ہم کوئی نیا پروجیکٹ نہیں بنائیں گے، بلکہ پہلے طریقے سے بنائے گئے اپنے موجودہ پروجیکٹ میں تبدیلیاں کریں گے۔

لہذا، سب سے پہلے، ہم تمام منصوبوں کو حل سے ہٹاتے ہیں سوائے اہم کے (جس میں براہ راست فائلیں شامل ہیں)۔ وہ. ورژن 2016-2020 کے منصوبے۔ فولڈر کو حل کے ساتھ کھولیں اور وہاں ان پروجیکٹس کے فولڈرز کو ڈیلیٹ کریں۔

ہمارے فیصلے میں ایک منصوبہ باقی ہے - MySuperPluginForRevit_2015. اس کی خصوصیات کھولیں اور:

  1. ٹیب پر "درخواست"اسمبلی کے نام سے لاحقہ ہٹا دیں۔ _2015 (یہ بعد میں واضح ہو جائے گا کہ کیوں)
  2. ٹیب پر "اسمبلی» مشروط تالیف کی علامت کو ہٹا دیں۔ R2015 متعلقہ فیلڈ سے

نوٹ: بصری اسٹوڈیو کے تازہ ترین ورژن میں ایک بگ ہے - مشروط تالیف کی علامتیں پروجیکٹ پراپرٹیز ونڈو میں ظاہر نہیں ہوتی ہیں، حالانکہ وہ دستیاب ہیں۔ اگر آپ کو اس خرابی کا سامنا ہے، تو آپ کو انہیں .csproj فائل سے دستی طور پر ہٹانا ہوگا۔ تاہم، ہمیں ابھی بھی اس میں کام کرنا ہے، تو پڑھتے رہیں۔

لاحقہ کو ہٹا کر حل ایکسپلورر ونڈو میں پروجیکٹ کا نام تبدیل کریں۔ _2015 اور پھر پروجیکٹ کو حل سے ہٹا دیں۔ یہ حکم اور کمال پسندوں کے جذبات کو برقرار رکھنے کے لیے ضروری ہے! ہم اپنے حل کے فولڈر کو کھولتے ہیں، اسی طرح پروجیکٹ فولڈر کا نام تبدیل کرتے ہیں اور پروجیکٹ کو دوبارہ حل میں لوڈ کرتے ہیں۔

کنفیگریشن مینیجر کھولیں۔ امریکی ترتیب رہائی اصولی طور پر، اس کی ضرورت نہیں ہوگی، لہذا ہم اسے حذف کر دیتے ہیں۔ ہم ان ناموں کے ساتھ نئی کنفیگریشن بناتے ہیں جو ہمارے لیے پہلے سے مانوس ہیں۔ R2015, R2016، ...، R2020. نوٹ کریں کہ آپ کو دیگر کنفیگریشنز سے سیٹنگز کاپی کرنے کی ضرورت نہیں ہے اور آپ کو پروجیکٹ کنفیگریشنز بنانے کی ضرورت نہیں ہے:

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

پروجیکٹ والے فولڈر میں جائیں اور .csproj ایکسٹینشن کے ساتھ فائل کو اپنے لیے آسان ایڈیٹر میں کھولیں۔ ویسے، آپ اسے ویژول اسٹوڈیو میں بھی کھول سکتے ہیں - آپ کو پروجیکٹ کو ان لوڈ کرنا ہوگا اور پھر مطلوبہ آئٹم سیاق و سباق کے مینو میں ہوگا:

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

بصری اسٹوڈیو میں ترمیم کرنا اور بھی بہتر ہے، کیونکہ ایڈیٹر دونوں سیدھ میں ہوتا ہے اور اشارہ کرتا ہے۔

فائل میں ہم عناصر دیکھیں گے۔ پراپرٹی گروپ - سب سے اوپر عام ہے، اور پھر حالات آتے ہیں۔ یہ عناصر منصوبے کی خصوصیات کو متعین کرتے ہیں جب اسے بنایا جاتا ہے۔ پہلا عنصر، جو بغیر شرائط کے ہوتا ہے، عمومی خواص کا تعین کرتا ہے، اور شرائط کے ساتھ عناصر، اس کے مطابق، ترتیب کے لحاظ سے کچھ خصوصیات کو تبدیل کرتا ہے۔

عام (پہلے) عنصر پر جائیں۔ پراپرٹی گروپ اور جائیداد کو دیکھو اسمبلی کا نام - یہ اسمبلی کا نام ہے اور ہمیں اسے لاحقہ کے بغیر ہونا چاہیے۔ _2015. اگر کوئی لاحقہ ہو تو نکال دیں۔

شرط کے ساتھ عنصر تلاش کرنا

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

ہمیں اس کی ضرورت نہیں ہے - ہم اسے حذف کر دیتے ہیں۔

شرط کے ساتھ عنصر

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

کوڈ ڈویلپمنٹ اور ڈیبگنگ کے مرحلے پر کام کرنے کی ضرورت ہوگی۔ آپ اپنی ضروریات کے مطابق اس کی خصوصیات کو تبدیل کر سکتے ہیں - مختلف آؤٹ پٹ پاتھ سیٹ کریں، مشروط تالیف کی علامتیں تبدیل کریں، وغیرہ۔

اب نئے عناصر بنائیں پراپرٹی گروپ ہماری ترتیب کے لیے۔ ان عناصر میں ہمیں صرف چار خصوصیات قائم کرنے کی ضرورت ہے:

  • آؤٹ پٹ پاتھ - باہر بھیجنے والی چیزوں کا خانہ. میں نے ڈیفالٹ ویلیو سیٹ کر لی ہے۔ binR20xx
  • Constants کی وضاحت کریں۔ - مشروط تالیف کی علامتیں۔ قیمت کی وضاحت کی جانی چاہئے۔ ٹریس؛ R20хх
  • ٹارگٹ فریم ورک ورژن - پلیٹ فارم ورژن۔ Revit API کے مختلف ورژن کے لیے مختلف پلیٹ فارمز کی وضاحت کی ضرورت ہوتی ہے۔
  • اسمبلی کا نام - اسمبلی کا نام (یعنی فائل کا نام)۔ آپ اسمبلی کا صحیح نام لکھ سکتے ہیں، لیکن استعداد کے لیے میں قیمت لکھنے کی تجویز کرتا ہوں۔ $(AssemblyName)_20хх. ایسا کرنے کے لیے، ہم نے پہلے اسمبلی کے نام سے لاحقہ ہٹا دیا تھا۔

ان تمام عناصر کی سب سے اہم خصوصیت یہ ہے کہ انہیں بغیر کسی تبدیلی کے دوسرے پروجیکٹس میں آسانی سے کاپی کیا جا سکتا ہے۔ بعد میں مضمون میں میں .csproj فائل کے تمام مواد کو منسلک کروں گا۔

ٹھیک ہے، ہم نے پروجیکٹ کی خصوصیات کا پتہ لگا لیا ہے - یہ مشکل نہیں ہے۔ لیکن پلگ ان لائبریریوں (NuGet پیکیجز) کے ساتھ کیا کرنا ہے۔ اگر ہم مزید دیکھیں تو ہم دیکھیں گے کہ شامل لائبریریوں کو عناصر میں بیان کیا گیا ہے۔ آئٹم گروپ. لیکن بدقسمتی - یہ عنصر غلط طریقے سے ایک عنصر کے طور پر حالات پر عملدرآمد کرتا ہے پراپرٹی گروپ. شاید یہ بھی بصری اسٹوڈیو کی خرابی ہے، لیکن اگر آپ کئی عناصر کی وضاحت کرتے ہیں۔ آئٹم گروپ کنفیگریشن کی شرائط کے ساتھ، اور اندر NuGet پیکجز کے مختلف لنکس داخل کریں، پھر جب آپ کنفیگریشن کو تبدیل کرتے ہیں، تمام مخصوص پیکجز پروجیکٹ سے منسلک ہوتے ہیں۔

عنصر ہماری مدد کے لیے آتا ہے۔ میں سے انتخاب کریں، جو ہماری معمول کی منطق کے مطابق کام کرتا ہے۔ اگر-پھر-اور.

عنصر کا استعمال کرتے ہوئے میں سے انتخاب کریں، ہم مختلف کنفیگریشنز کے لیے مختلف NuGet پیکجز سیٹ کرتے ہیں:

تمام مشمولات csproj

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0"  ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{5AD738D6-4122-4E76-B865-BE7CE0F6B3EB}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>MySuperPluginForRevit</RootNamespace>
    <AssemblyName>MySuperPluginForRevit</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <Deterministic>true</Deterministic>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>binDebug</OutputPath>
    <DefineConstants>DEBUG;R2015</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'R2015|AnyCPU' ">
    <OutputPath>binR2015</OutputPath>
    <DefineConstants>TRACE;R2015</DefineConstants>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <AssemblyName>$(AssemblyName)_2015</AssemblyName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'R2016|AnyCPU' ">
    <OutputPath>binR2016</OutputPath>
    <DefineConstants>TRACE;R2016</DefineConstants>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <AssemblyName>$(AssemblyName)_2016</AssemblyName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'R2017|AnyCPU' ">
    <OutputPath>binR2017</OutputPath>
    <DefineConstants>TRACE;R2017</DefineConstants>
    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
    <AssemblyName>$(AssemblyName)_2017</AssemblyName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'R2018|AnyCPU' ">
    <OutputPath>binR2018</OutputPath>
    <DefineConstants>TRACE;R2018</DefineConstants>
    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
    <AssemblyName>$(AssemblyName)_2018</AssemblyName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'R2019|AnyCPU' ">
    <OutputPath>binR2019</OutputPath>
    <DefineConstants>TRACE;R2019</DefineConstants>
    <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
    <AssemblyName>$(AssemblyName)_2019</AssemblyName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'R2020|AnyCPU' ">
    <OutputPath>binR2020</OutputPath>
    <DefineConstants>TRACE;R2020</DefineConstants>
    <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
    <AssemblyName>$(AssemblyName)_2020</AssemblyName>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Class1.cs" />
    <Compile Include="PropertiesAssemblyInfo.cs" />
  </ItemGroup>
  <Choose>
    <When Condition=" '$(Configuration)'=='R2015' ">
      <ItemGroup>
        <PackageReference Include="ModPlus.Revit.API.2015">
          <Version>1.0.0</Version>
          <ExcludeAssets>runtime</ExcludeAssets>
        </PackageReference>
      </ItemGroup>
    </When>
    <When Condition=" '$(Configuration)'=='R2016' ">
      <ItemGroup>
        <PackageReference Include="ModPlus.Revit.API.2016">
          <Version>1.0.0</Version>
          <ExcludeAssets>runtime</ExcludeAssets>
        </PackageReference>
      </ItemGroup>
    </When>
    <When Condition=" '$(Configuration)'=='R2017' ">
      <ItemGroup>
        <PackageReference Include="ModPlus.Revit.API.2017">
          <Version>1.0.0</Version>
          <ExcludeAssets>runtime</ExcludeAssets>
        </PackageReference>
      </ItemGroup>
    </When>
    <When Condition=" '$(Configuration)'=='R2018' ">
      <ItemGroup>
        <PackageReference Include="ModPlus.Revit.API.2018">
          <Version>1.0.0</Version>
          <ExcludeAssets>runtime</ExcludeAssets>
        </PackageReference>
      </ItemGroup>
    </When>
    <When Condition=" '$(Configuration)'=='R2019' ">
      <ItemGroup>
        <PackageReference Include="ModPlus.Revit.API.2019">
          <Version>1.0.0</Version>
          <ExcludeAssets>runtime</ExcludeAssets>
        </PackageReference>
      </ItemGroup>
    </When>
    <When Condition=" '$(Configuration)'=='R2020' or '$(Configuration)'=='Debug'">
      <ItemGroup>
        <PackageReference Include="ModPlus.Revit.API.2020">
          <Version>1.0.0</Version>
          <ExcludeAssets>runtime</ExcludeAssets>
        </PackageReference>
      </ItemGroup>
    </When>
  </Choose>
  <Import Project="$(MSBuildToolsPath)Microsoft.CSharp.targets" />
</Project>

براہ کرم نوٹ کریں کہ میں نے ان شرائط میں سے ایک میں دو کنفیگریشنز کے ذریعے وضاحت کی ہے۔ یا. اس طرح مطلوبہ پیکج کنفیگریشن کے دوران منسلک ہو جائے گا۔ ڈیبگ.

اور یہاں ہمارے پاس تقریباً ہر چیز کامل ہے۔ ہم پروجیکٹ کو واپس لوڈ کرتے ہیں، ہمیں مطلوبہ کنفیگریشن کو فعال کرتے ہیں، حل کے سیاق و سباق کے مینو میں آئٹم کو کال کریں (پروجیکٹ نہیں)تمام NuGet پیکیجز کو بحال کریں۔"اور ہم دیکھتے ہیں کہ ہمارے پیکجز کیسے بدلتے ہیں۔

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

اور اس مرحلے پر میں ایک ڈیڈ اینڈ پر پہنچ گیا - تمام کنفیگریشنز کو ایک ساتھ جمع کرنے کے لیے، ہم بیچ اسمبلی استعمال کر سکتے ہیں (مینو "اسمبلی->بیچ کی تعمیر")، لیکن کنفیگریشنز کو تبدیل کرتے وقت، پیکجز خود بخود بحال نہیں ہوتے ہیں۔ اور پروجیکٹ کو جمع کرتے وقت، یہ بھی نہیں ہوتا ہے، حالانکہ نظریہ میں، یہ ہونا چاہیے۔ مجھے معیاری ذرائع کا استعمال کرتے ہوئے اس مسئلے کا حل نہیں ملا ہے۔ اور غالباً یہ بھی ایک بصری اسٹوڈیو بگ ہے۔

لہذا، بیچ اسمبلی کے لئے، یہ ایک خصوصی خود کار اسمبلی کے نظام کو استعمال کرنے کا فیصلہ کیا گیا تھا نیک. میں اصل میں یہ نہیں چاہتا تھا کیونکہ مجھے لگتا ہے کہ یہ پلگ ان کی ترقی کے لحاظ سے بہت زیادہ ہے، لیکن اس وقت مجھے کوئی دوسرا حل نظر نہیں آتا۔ اور اس سوال پر کہ "کیوں نیوک؟" جواب آسان ہے - ہم اسے کام پر استعمال کرتے ہیں۔

تو، ہمارے حل کے فولڈر میں جائیں (پروجیکٹ نہیں)، کلید کو دبا کر رکھیں منتقل اور فولڈر میں خالی جگہ پر دائیں کلک کریں - سیاق و سباق کے مینو میں آئٹم کو منتخب کریں۔پاور شیل ونڈو یہاں کھولیں۔'.

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

اگر آپ نے اسے انسٹال نہیں کیا ہے۔ جوہری، پھر پہلے کمانڈ لکھیں۔

dotnet tool install Nuke.GlobalTool –global

اب کمانڈ لکھیں۔ جوہری اور آپ کو ترتیب دینے کے لیے کہا جائے گا۔ جوہری موجودہ منصوبے کے لیے۔ میں نہیں جانتا کہ اسے روسی میں مزید صحیح طریقے سے کیسے لکھوں - انگریزی میں لکھا جائے گا Could not find .nuke فائل۔ کیا آپ ایک بلڈ سیٹ اپ کرنا چاہتے ہیں؟ [y/n]

Y کلید کو دبائیں اور پھر براہ راست ترتیبات کی اشیاء ہوں گی۔ ہمیں سب سے آسان آپشن استعمال کرنے کی ضرورت ہے۔ ایم ایس بلڈ، تو ہم اسکرین شاٹ کی طرح جواب دیتے ہیں:

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

آئیے ویژول اسٹوڈیو پر جائیں، جو ہمیں حل کو دوبارہ لوڈ کرنے کا اشارہ کرے گا، کیونکہ اس میں ایک نیا پروجیکٹ شامل کیا گیا ہے۔ ہم حل کو دوبارہ لوڈ کرتے ہیں اور دیکھتے ہیں کہ ہمارے پاس ایک پروجیکٹ ہے۔ تعمیر جس میں ہمیں صرف ایک فائل میں دلچسپی ہے - Build.cs

ہم Revit/AutoCAD کے مختلف ورژن کے لیے تالیف کے ساتھ ایک پلگ ان پروجیکٹ بناتے ہیں۔

اس فائل کو کھولیں اور تمام کنفیگریشنز کے لیے پروجیکٹ بنانے کے لیے اسکرپٹ لکھیں۔ ٹھیک ہے، یا میری اسکرپٹ کا استعمال کریں، جسے آپ اپنی ضروریات کے مطابق ترمیم کر سکتے ہیں:

using System.IO;
using Nuke.Common;
using Nuke.Common.Execution;
using Nuke.Common.ProjectModel;
using Nuke.Common.Tools.MSBuild;
using static Nuke.Common.Tools.MSBuild.MSBuildTasks;

[CheckBuildProjectConfigurations]
[UnsetVisualStudioEnvironmentVariables]
class Build : NukeBuild
{
    public static int Main () => Execute<Build>(x => x.Compile);

    [Solution] readonly Solution Solution;

    // If the solution name and the project (plugin) name are different, then indicate the project (plugin) name here
    string PluginName => Solution.Name;

    Target Compile => _ => _
        .Executes(() =>
        {
            var project = Solution.GetProject(PluginName);
            if (project == null)
                throw new FileNotFoundException("Not found!");

            var build = new List<string>();
            foreach (var (_, c) in project.Configurations)
            {
                var configuration = c.Split("|")[0];

                if (configuration == "Debug" || build.Contains(configuration))
                    continue;

                Logger.Normal($"Configuration: {configuration}");

                build.Add(configuration);

                MSBuild(_ => _
                    .SetProjectFile(project.Path)
                    .SetConfiguration(configuration)
                    .SetTargets("Restore"));
                MSBuild(_ => _
                    .SetProjectFile(project.Path)
                    .SetConfiguration(configuration)
                    .SetTargets("Rebuild"));
            }
        });
}

ہم پاور شیل ونڈو پر واپس آتے ہیں اور دوبارہ کمانڈ لکھتے ہیں۔ جوہری (آپ کمانڈ لکھ سکتے ہیں۔ جوہری مطلوبہ کی نشاندہی کرنا ہدف. لیکن ہمارے پاس ایک ہے۔ ہدف، جو بطور ڈیفالٹ چلتا ہے)۔ Enter کلید کو دبانے کے بعد، ہم اصلی ہیکرز کی طرح محسوس کریں گے، کیونکہ، ایک فلم کی طرح، ہمارا پروجیکٹ خود بخود مختلف کنفیگریشنز کے لیے جمع ہو جائے گا۔

ویسے، آپ پاور شیل کو براہ راست بصری اسٹوڈیو سے استعمال کر سکتے ہیں (مینو "دیکھیں->دوسری کھڑکیاں->پیکیج مینیجر کنسول")، لیکن سب کچھ سیاہ اور سفید میں ہو گا، جو بہت آسان نہیں ہے.

یہ میرا مضمون ختم کرتا ہے۔ مجھے یقین ہے کہ آپ خود آٹو کیڈ کے آپشن کا پتہ لگا سکتے ہیں۔ مجھے امید ہے کہ یہاں پیش کردہ مواد اپنے "کلائنٹس" کو تلاش کر لے گا۔

آپ کا شکریہ!

ماخذ: www.habr.com

نیا تبصرہ شامل کریں