اسان Revit/AutoCAD جي مختلف ورزن لاءِ تاليف سان گڏ هڪ پلگ ان پروجيڪٽ ٺاهيندا آهيون

اسان Revit/AutoCAD جي مختلف ورزن لاءِ تاليف سان گڏ هڪ پلگ ان پروجيڪٽ ٺاهيندا آهيون

جڏهن CAD ايپليڪيشنن لاءِ پلگ ان ٺاهي رهيا آهن (منهنجي صورت ۾ اهي آهن AutoCAD، Revit ۽ Renga) وقت سان گڏ، هڪ مسئلو ظاهر ٿئي ٿو - پروگرامن جا نوان ورجن جاري ڪيا ويا آهن، انهن جي API تبديلين ۽ پلگ ان جا نوان ورزن ٺاهڻ گهرجن.

جڏهن توهان وٽ صرف هڪ پلگ ان آهي يا توهان اڃا تائين هن معاملي ۾ هڪ خود سيکاريو شروع ڪندڙ آهيو، توهان آساني سان پروجيڪٽ جي ڪاپي ٺاهي سگهو ٿا، ان ۾ ضروري جڳهن کي تبديل ڪري سگهو ٿا ۽ پلگ ان جو هڪ نئون نسخو گڏ ڪري سگهو ٿا. ان جي مطابق، ڪوڊ ۾ ايندڙ تبديليون مزدورن جي خرچن ۾ گھڻا واڌارو ڪندو.

جئين توهان تجربو ۽ ڄاڻ حاصل ڪندا، توهان هن عمل کي خودڪار ڪرڻ جا ڪيترائي طريقا ڳوليندا. مان هن رستي تي هليو ويو آهيان ۽ مان توهان کي ٻڌائڻ چاهيان ٿو ته مون ڇا ڪيو ۽ اهو ڪيترو آسان آهي.

پهرين، اچو ته هڪ طريقو ڏسو جيڪو واضح آهي ۽ جيڪو مون ڊگهي وقت تائين استعمال ڪيو آهي.

پروجيڪٽ فائلن جي لنڪ

۽ سڀڪنھن شيء کي سادو، بصري ۽ سمجھڻ وارو بڻائڻ لاء، آئون پلگ ان ڊولپمينٽ جو خلاصو مثال استعمال ڪندي سڀ ڪجھ بيان ڪندس.

اچو ته Visual Studio کوليون (مون وٽ ڪميونٽي 2019 ورزن آهي. ۽ ها - روسي ۾) ۽ هڪ نئون حل ٺاهيو. اچو ته کيس سڏين MySuperPluginForRevit

اسان Revit/AutoCAD جي مختلف ورزن لاءِ تاليف سان گڏ هڪ پلگ ان پروجيڪٽ ٺاهيندا آهيون

اسان ورزن 2015-2020 لاءِ Revit لاءِ پلگ ان ٺاهينداسين. تنهن ڪري، اچو ته حل ۾ هڪ نئون منصوبو ٺاهيو (نيٽ فريم ورڪ ڪلاس لائبريري) ۽ ان کي سڏين MySuperPluginForRevit_2015

اسان Revit/AutoCAD جي مختلف ورزن لاءِ تاليف سان گڏ هڪ پلگ ان پروجيڪٽ ٺاهيندا آهيون

اسان کي Revit API ۾ لنڪ شامل ڪرڻ جي ضرورت آهي. يقينن، اسان مقامي فائلن ۾ لنڪ شامل ڪري سگھون ٿا (اسان کي تمام ضروري SDKs يا Revit جي سڀني ورزن کي انسٽال ڪرڻ جي ضرورت پوندي)، پر اسان فوري طور تي صحيح رستو تي عمل ڪنداسين ۽ NuGet پيڪيج کي ڳنڍينداسين. توھان ڪافي ڪجھ پيڪيجز ڳولي سگھو ٿا، پر مان پنھنجو استعمال ڪندس.

پيڪيج کي ڳنڍڻ کان پوء، شيء تي صحيح ڪلڪ ڪريو "حوالن"۽ شيون چونڊيو"PackageReference ڏانهن packages.config منتقل ڪريو...»

اسان 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 جي مختلف ورزن لاءِ تاليف سان گڏ هڪ پلگ ان پروجيڪٽ ٺاهيندا آهيون

نوٽ ڪريو ته علامت کي شامل ڪيو وڃي ڊيبگ ۽ رليز جي ترتيبن لاءِ.

خير، جڏهن اسان ملڪيت ونڊو ۾ آهيون، اسان فوري طور تي وڃو "ٽيبدرخواست"۽ ميدان ۾"Default namespace» لاحقه هٽايو _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 لاڳاپيل فيلڊ کان

نوٽ: Visual Studio جي تازي ورزن ۾ هڪ بگ آهي - مشروط تاليف جا نشان پروجيڪٽ پراپرٽيز ونڊو ۾ نه ڏيکاريا ويا آهن، جيتوڻيڪ اهي موجود آهن. جيڪڏهن توهان هن خرابي جو تجربو ڪيو، ته پوء توهان کي انهن کي دستي طور تي هٽائڻ جي ضرورت آهي .csproj فائل مان. بهرحال، اسان کي اڃا تائين ان ۾ ڪم ڪرڻو آهي، تنهنڪري پڙهو.

پروجيڪٽ جو نالو تبديل ڪريو حل ايڪسپلورر ونڊو ۾ لاڳيتو ختم ڪندي _2015 ۽ پوء منصوبي کي حل مان هٽايو. اهو ڪماليت پسندن جي نظم ۽ احساس کي برقرار رکڻ لاء ضروري آهي! اسان پنهنجي حل جو فولڊر کوليو، اتي ئي پروجيڪٽ فولڊر جو نالو مٽايو ۽ پروجيڪٽ کي ٻيهر حل ۾ لوڊ ڪيو.

کوليو ٺاھ جوڙ مينيجر. يو ايس جي ترتيب ڇڏڻ اصول ۾، ان جي ضرورت نه هوندي، تنهنڪري اسان ان کي حذف ڪريون ٿا. اسان نالن سان نئين ترتيب ٺاهيندا آهيون جيڪي اڳ ۾ ئي اسان کان واقف آهن R2015, R2016، …، R2020. ياد رکو ته توهان کي ٻين ترتيبن مان سيٽنگون نقل ڪرڻ جي ضرورت ناهي ۽ توهان کي پروجيڪٽ جي ترتيبن کي ٺاهڻ جي ضرورت ناهي:

اسان Revit/AutoCAD جي مختلف ورزن لاءِ تاليف سان گڏ هڪ پلگ ان پروجيڪٽ ٺاهيندا آهيون

پروجيڪٽ سان گڏ فولڊر ۾ وڃو ۽ فائل کي کوليو .csproj ايڪسٽينشن سان هڪ ايڊيٽر ۾ جيڪو توهان لاءِ آسان آهي. رستي جي ذريعي، توهان ان کي بصري اسٽوڊيو ۾ پڻ کوليو ٿا - توهان کي پروجيڪٽ کي لوڊ ڪرڻ جي ضرورت آهي ۽ پوء گهربل شيون مينيو ۾ هوندو:

اسان Revit/AutoCAD جي مختلف ورزن لاءِ تاليف سان گڏ هڪ پلگ ان پروجيڪٽ ٺاهيندا آهيون

بصري اسٽوڊيو ۾ ايڊيٽنگ اڃا به بهتر آهي، ڇاڪاڻ ته ايڊيٽر ٻنهي کي ترتيب ۽ اشارو ڏئي ٿو.

فائل ۾ اسان عناصر کي ڏسندا سين پراپرٽي گروپ - سڀ کان مٿي تي عام آهي، ۽ پوء حالتون اينديون آهن. اهي عناصر منصوبي جي ملڪيت کي مقرر ڪن ٿا جڏهن اهو تعمير ڪيو ويو آهي. پهريون عنصر، جيڪو بغير شرطن جي آهي، سيٽ ڪري ٿو عام ملڪيت، ۽ شرطن سان عناصر، ان جي مطابق، ترتيبن جي بنياد تي ڪجهه خاصيتون تبديل ڪريو.

عام (پهرين) عنصر ڏانھن وڃو پراپرٽي گروپ ۽ ملڪيت کي ڏسو اسيمبلي جو نالو - هي اسيمبلي جو نالو آهي ۽ اسان کي ان کي بغير ڪنهن لافاني جي هجڻ گهرجي _2015. جيڪڏهن ڪو لاڳاپو آهي، ته پوء ان کي هٽايو.

شرط سان هڪ عنصر ڳولڻ

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

اسان کي ان جي ضرورت ناهي - اسان ان کي ختم ڪريون ٿا.

شرط سان عنصر

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

ڪوڊ ڊولپمينٽ ۽ ڊيبگنگ جي اسٽيج تي ڪم ڪرڻ جي ضرورت پوندي. توھان پنھنجي ضرورتن کي پورو ڪرڻ لاءِ ان جي ملڪيت کي تبديل ڪري سگھو ٿا - مختلف آئوٽ پٽ رستا سيٽ ڪريو، مشروط تاليف جي نشانين کي تبديل ڪريو، وغيره.

ھاڻي اچو ته نوان عنصر ٺاھيون پراپرٽي گروپ اسان جي جوڙجڪ لاء. انهن عناصر ۾ اسان کي صرف چار خاصيتون مقرر ڪرڻ جي ضرورت آهي:

  • OutputPath - آئوٽ فولڊر. مون ڊفالٽ قدر مقرر ڪيو binR20xx
  • Constants جي وضاحت ڪريو - مشروط تاليف جا نشان. قدر بيان ڪيو وڃي TRACE؛ R20хх
  • ٽارگيٽ فريم ورڪ ورزن - پليٽ فارم نسخو. Revit API جي مختلف ورزن کي مختلف پليٽ فارمن جي وضاحت ڪرڻ جي ضرورت آهي.
  • اسيمبلي جو نالو - اسيمبلي جو نالو (يعني فائل جو نالو). توهان اسيمبليء جو صحيح نالو لکي سگهو ٿا، پر استحڪام لاء آئون قيمت لکڻ جي صلاح ڏيان ٿو $(اسمبلي جو نالو)_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 جي مختلف ورزن لاءِ تاليف سان گڏ هڪ پلگ ان پروجيڪٽ ٺاهيندا آهيون

۽ هن اسٽيج تي آئون ختم ٿي چڪو آهيان - هڪ ئي وقت ۾ سڀني ترتيبن کي گڏ ڪرڻ لاءِ، اسان استعمال ڪري سگهون ٿا بيچ اسيمبلي (مينيو "اسيمبلي»->بيچ ٺاھڻ")، پر جڏهن ترتيبن کي تبديل ڪري، پيڪيجز خودڪار طريقي سان بحال نه ٿيندا آهن. ۽ جڏهن منصوبي کي گڏ ڪرڻ، اهو پڻ نٿو ٿئي، جيتوڻيڪ، نظريي ۾، اهو هجڻ گهرجي. مون کي معياري وسيلا استعمال ڪندي هن مسئلي جو حل نه مليو آهي. ۽ گهڻو ڪري اهو پڻ هڪ بصري اسٽوڊيو بگ آهي.

تنهن ڪري، بيچ اسيمبلي لاء، ان کي هڪ خاص خودڪار اسيمبلي نظام استعمال ڪرڻ جو فيصلو ڪيو ويو Nuke. مون اصل ۾ اهو نه چاهيو ڇو ته منهنجو خيال آهي ته اهو پلگ ان ڊولپمينٽ جي لحاظ کان تمام گهڻو آهي، پر هن وقت مون کي ڪو ٻيو حل نظر نٿو اچي. ۽ سوال ڪرڻ لاء "ڇو Nuke؟" جواب سادو آهي - اسان ان کي ڪم تي استعمال ڪندا آهيون.

تنهن ڪري، اسان جي حل جي فولڊر ڏانهن وڃو (پروجيڪٽ نه)، چيڪ کي دٻايو شفٽ ۽ فولڊر ۾ خالي جاءِ تي ساڄي ڪلڪ ڪريو - ڪنٽيڪٽ مينيو ۾ آئٽم کي چونڊيو "هتي PowerShell ونڊو کوليو».

اسان Revit/AutoCAD جي مختلف ورزن لاءِ تاليف سان گڏ هڪ پلگ ان پروجيڪٽ ٺاهيندا آهيون

جيڪڏهن توهان ان کي نصب نه ڪيو آهي نڪڪ، پوءِ پھريون حڪم لکو

dotnet tool install Nuke.GlobalTool –global

ھاڻي حڪم لکو نڪڪ ۽ توهان کي ترتيب ڏيڻ لاء چيو ويندو نڪڪ موجوده منصوبي لاء. مون کي خبر ناهي ته اهو ڪيئن لکجي وڌيڪ صحيح روسي ۾ - انگريزيءَ ۾ اهو لکيل هوندو Could not find .nuke file. ڇا توھان چاھيو ٿا ٺاھ ٺاھيو؟ [y/n]

Y کي دٻايو ۽ پوء اتي سڌو سيٽنگون شيون هونديون. اسان کي استعمال ڪرڻ آسان اختيار جي ضرورت آهي ايم ايس بلڊ، تنهنڪري اسان جواب ڏيون ٿا جيئن اسڪرين شاٽ ۾:

اسان Revit/AutoCAD جي مختلف ورزن لاءِ تاليف سان گڏ هڪ پلگ ان پروجيڪٽ ٺاهيندا آهيون

اچو ته Visual Studio ڏانهن وڃو، جيڪو اسان کي حل کي ٻيهر لوڊ ڪرڻ جي ترغيب ڏيندو، ڇاڪاڻ ته ان ۾ هڪ نئون منصوبو شامل ڪيو ويو آهي. اسان حل کي ٻيهر لوڊ ڪيو ۽ ڏسو ته اسان وٽ هڪ منصوبو آهي کپن جنهن ۾ اسان کي صرف هڪ فائل ۾ دلچسپي آهي. 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"));
            }
        });
}

اسان PowerShell ونڊو ڏانهن واپس وڃو ۽ حڪم ٻيهر لکو نڪڪ (توهان حڪم لکي سگهو ٿا نڪڪ گهربل اشارو ٽارگيٽ. پر اسان وٽ ھڪڙو آھي ٽارگيٽ، جيڪو ڊفالٽ طور هلندو آهي). Enter بٽڻ کي دٻائڻ کان پوء، اسان حقيقي هيڪرز وانگر محسوس ڪنداسين، ڇاڪاڻ ته، فلم وانگر، اسان جو پروجيڪٽ خود بخود مختلف ترتيبن لاء گڏ ڪيو ويندو.

رستي ۾، توهان سڌو سنئون اسٽوڊيو مان PowerShell استعمال ڪري سگهو ٿا (مينيو "ڏسڻ»->ٻيون ونڊوز»->پيڪيج مئنيجر ڪنسول")، پر هر شيء ڪارا ۽ اڇا ۾ هوندي، جيڪا تمام آسان ناهي.

هي منهنجو مضمون ختم ڪري ٿو. مون کي پڪ آهي ته توهان خود آٽو ڪيڊ لاءِ اختيار ڳولي سگهو ٿا. مون کي اميد آهي ته هتي پيش ڪيل مواد ان جي "گراهڪن" کي ڳولي سگهندو.

Спасибо за внимание!

جو ذريعو: www.habr.com

تبصرو شامل ڪريو