موږ د 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 کڅوړه سره وصل کړو. تاسو کولی شئ یو څو کڅوړې ومومئ، مګر زه به خپل ځان وکاروم.

د بسته بندۍ وروسته، په توکي کې ښیې کلیک وکړئ "مرجع"او توکي وټاکئ"PackageReference ته Packages.config حرکت ورکړئ...»

موږ د Revit/AutoCAD مختلف نسخو لپاره د تالیف سره یو پلگ ان پروژه رامینځته کوو

که ناڅاپه پدې مرحله کې تاسو ویره پیل کړئ ، ځکه چې د بسته بندۍ ملکیت کړکۍ کې به هیڅ مهم توکي شتون ونلري "په محلي توګه کاپي کړئ"، کوم چې موږ یقینا ارزښت ته اړتیا لرو غلط، بیا مه ویره مه کوئ - د پروژې سره فولډر ته لاړشئ ، د .csproj توسیع سره فایل ستاسو لپاره مناسب ایډیټر کې خلاص کړئ (زه نوټ پیډ ++ کاروم) او هلته زموږ د کڅوړې په اړه ننوتل ومومئ. هغه اوس داسې ښکاري:

<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. اوږده - په پروژه کې ښیې کلیک وکړئ او غوره کړئ "Add»->موجود عنصر"، په هغه کړکۍ کې چې خلاصیږي، اړین فایل ومومئ او د انتخاب پرځای "Add"اختیار وټاکئ"د پیوستون په توګه اضافه کړئ»

موږ د Revit/AutoCAD مختلف نسخو لپاره د تالیف سره یو پلگ ان پروژه رامینځته کوو

  1. لنډ - په مستقیم ډول د حل اکسپلورر کې، مطلوب فایل غوره کړئ (یا حتی فایلونه، یا حتی ټول فولډرونه) او د Alt کیلي په نیولو سره یې نوې پروژې ته کش کړئ. لکه څنګه چې تاسو ډریګ کوئ، تاسو به وګورئ چې کله تاسو د Alt کیلي فشار ورکړئ، د موږک کرسر به د جمع نښه څخه تیر ته بدل شي.
    UPD: ما پدې پراګراف کې یو څه ګډوډي رامینځته کړه - د څو فایلونو لیږدولو لپاره چې تاسو یې ونیسئ شفټ + آلټ!

د طرزالعمل ترسره کولو وروسته، موږ به په دویمه پروژه کې یو فایل ولرو 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' ">

د کوډ پراختیا او ډیبګ کولو مرحله کې کار کولو ته به اړتیا وي. تاسو کولی شئ د خپلو اړتیاو سره سم د هغې ملکیتونه بدل کړئ - مختلف محصول لارې تنظیم کړئ ، د مشروط تالیف سمبولونه بدل کړئ ، او داسې نور.

اوس راځئ چې نوي عناصر جوړ کړو د ملکیت ګروپ زموږ د تشکیلاتو لپاره. په دې عناصرو کې موږ یوازې څلور ملکیتونو ته اړتیا لرو:

  • OutputPath - د محصول فولډر. ما د ډیفالټ ارزښت ترتیب کړ binR20xx
  • Constants تعریف کړئ - د مشروط تالیف سمبولونه. ارزښت باید مشخص شي TRACE؛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>

مهرباني وکړئ په یاد ولرئ چې په یو شرایطو کې ما د دې له لارې دوه تشکیلات مشخص کړل OR. پدې توګه اړین بسته به د ترتیب کولو پرمهال وصل شي Debug.

او دلته موږ نږدې هرڅه بشپړ لرو. موږ پروژه بیرته پورته کوو، هغه ترتیب فعال کړو چې موږ ورته اړتیا لرو، توکي د حل په شرایطو مینو کې "نه" غږ کړئ (نه پروژه)ټول NuGet کڅوړې بحال کړئ"او موږ ګورو چې زموږ کڅوړې څنګه بدلیږي.

موږ د Revit/AutoCAD مختلف نسخو لپاره د تالیف سره یو پلگ ان پروژه رامینځته کوو

او پدې مرحله کې زه پای ته ورسیدم - په یوځل کې د ټولو تشکیلاتو راټولولو لپاره ، موږ کولی شو د بیچ مجلس وکاروو (مینو "شورا»->بسته جوړونه")، مګر کله چې ترتیبات بدل شي، کڅوړې په اوتومات ډول نه بحال کیږي. او کله چې د پروژې راټولول، دا هم نه کیږي، که څه هم، په تیوري کې، دا باید وي. ما د معیاري وسیلو په کارولو سره د دې ستونزې حل ندی موندلی. او ډیری احتمال دا هم د بصری سټوډیو بګ دی.

له همدې امله، د بست مجلس لپاره، پریکړه وشوه چې د ځانګړي اتوماتیک مجلس سیسټم وکاروي طاقتونو. زه واقعیا دا نه غواړم ځکه چې زه فکر کوم دا د پلگ ان پراختیا په شرایطو کې خورا ډیر دی ، مګر دا مهال زه بل حل نه ګورم. او دې پوښتنې ته "ولې نیوکې؟" ځواب ساده دی - موږ دا په کار کې کاروو.

نو، زموږ د حل فولډر ته لاړ شئ (نه پروژه)، کیلي ونیسئ Shift او په فولډر کې په خالي ځای کې ښیې کلیک وکړئ - د شرایطو مینو کې توکي غوره کړئ "دلته د PowerShell کړکۍ خلاص کړئ".

موږ د Revit/AutoCAD مختلف نسخو لپاره د تالیف سره یو پلگ ان پروژه رامینځته کوو

که تاسو دا نصب نلرئ نیوکی، بیا لومړی کمانډ ولیکئ

dotnet tool install Nuke.GlobalTool –global

اوس کمانډ ولیکئ نیوکی او تاسو ته به د تنظیم کولو لپاره هڅول کیږي نیوکی د اوسنۍ پروژې لپاره. زه نه پوهیږم چې دا څنګه په روسیه کې په سمه توګه ولیکئ - په انګلیسي کې به دا لیکل کیږي Could not find .nuke file. ایا تاسو غواړئ یو جوړښت تنظیم کړئ؟ [y/n]

د Y کیلي فشار ورکړئ او بیا به مستقیم ترتیبات توکي وي. موږ د کارولو ساده انتخاب ته اړتیا لرو MSBuild، نو موږ ځواب ورکوو لکه څنګه چې په سکرین شاټ کې:

موږ د 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"));
            }
        });
}

موږ بیرته PowerShell کړکۍ ته راځو او کمانډ بیا ولیکئ نیوکی (تاسو کولی شئ کمانډ ولیکئ نیوکی د اړتیا په ګوته کوي د هدف. مګر موږ یو لرو د هدف، کوم چې د ډیفالټ لخوا پرمخ ځي). د Enter کیلي فشارولو وروسته، موږ به د ریښتیني هیکرانو په څیر احساس وکړو، ځکه چې د فلم په څیر، زموږ پروژه به په اتوماتيک ډول د مختلف ترتیباتو لپاره راټول شي.

په هرصورت، تاسو کولی شئ په مستقیم ډول د بصری سټوډیو څخه PowerShell وکاروئ (مینو "محتویات»->نورې کړکۍ»->د بسته بندي مدیر کنسول")، مګر هرڅه به په تور او سپین کې وي، کوم چې خورا اسانه نه وي.

دا زما مقاله پای ته رسوي. زه ډاډه یم چې تاسو کولی شئ پخپله د AutoCAD لپاره اختیار ومومئ. زه امید لرم چې دلته وړاندې شوي مواد به خپل "پیرودونکي" ومومي.

ستاسو د پاملرنې مننه!

سرچینه: www.habr.com

Add a comment