Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

Kur zhvillimin e plugjave pĂ«r aplikacionet CAD (nĂ« rastin tim Ă«shtĂ« AutoCAD, Revit dhe Renga) me kalimin e kohĂ«s shfaqet njĂ« problem – dalin versione tĂ« reja tĂ« programeve, ndryshon API i tyre dhe ne duhet tĂ« bĂ«jmĂ« versione tĂ« reja tĂ« plugjave.

Kur keni vetëm një plug dhe jeni akoma fillestar në këtë fushë, mund ta bëni thjesht një kopje të projektit, të ndryshoni vendet e nevojshme dhe të krijoni një version të ri të plugut. Së bashku, çdo ndryshim në kod do të sjellë një rritje të konsiderueshme të shpërndarjes së punës.

Me rritjen e përvojës dhe njohurive do të gjeni disa mënyra për ta automatizuar këtë proces. Unë kalova këtë rrugë dhe dua t'ju them çfarë arrita dhe sa e lehtë është kjo.

Fillimisht, le të shqyrtojmë metodën që është e dukshme dhe e cila e kam përdorur për një kohë të gjatë.

Lidhjet për skedarët e projektit

Dhe për ta bërë gjithçka të thjeshtë, vizuale dhe të qartë, do të përshkruaj gjithçka në një shembull abstrakt të zhvillimit të plugut.

Hapim Visual Studio (kam versionin Community 2019. Dhe po – nĂ« gjuhĂ«n ruse) dhe krijojmĂ« njĂ« zgjidhje tĂ« re. Do ta quajmĂ« MySuperPluginForRevit

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

Ne do të bëjmë një plug për Revit për versionet 2015-2020. Prandaj do të krijoj një projekt të ri në zgjidhje (Bibliotekë klasash Net Framework) dhe do ta quaj MySuperPluginForRevit_2015

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

Na nevojitet të shtojmë lidhje për API-në e Revit. Sigurisht, mund të shtojmë lidhje për skedarët lokalë (do të duhet të instalojmë të gjitha SDK-të e nevojshme ose të gjitha versionet e Revit), por ne do të shkojmë direkt në rrugën e duhur dhe do të lidhim paketën NuGet. Mund të gjeni një numër të konsiderueshëm paketash, por unë do të përdor ato të mia.

Pas lidhjes sĂ« paketĂ«s, kliko me klik tĂ« djathtĂ« mbi "Linket" dhe zgjidh nĂ« menu opsionin "Shkalo packages.config nĂ« PackageReference »

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

NĂ«se ndodhi tĂ« filloni panik, sepse nĂ« dritaren e pronave tĂ« paketĂ«s nuk ka njĂ« pikĂ« tĂ« rĂ«ndĂ«sishme "Kopjo lokalisht", e cila Ă«shtĂ« e nevojshme tĂ« vendoset nĂ« vlerĂ«n false, nuk ka nevojĂ« tĂ« panicni – shkojmĂ« nĂ« dosjen e projektit, hapim skedarin me zgjerimin .csproj nĂ« ndonjĂ« editor tĂ« pĂ«rshtatshĂ«m pĂ«r ju (unĂ« pĂ«rdor Notepad++) dhe gjejmĂ« atje shprehjen pĂ«r paketĂ«n tonĂ«. Duke e parĂ« tani kĂ«shtu:

1.0.0

Atij i shtojmë pronën runtime. Do të duket kështu:

1.0.0
  runtime

Tani tani, projekti juaj do të përdorë skedarët nga paketa dhe nuk do t'i kopjojë ato në dosjen e daljes.
TĂ« vazhdojmĂ« - le tĂ« paramendojmĂ« se plUGINI ynĂ« do tĂ« pĂ«rdorĂ« diçka nga Revit API, e cila ka ndryshuar me kalimin e kohĂ«s me daljen e versioneve tĂ« reja. Ose ndoshta na nevojitet tĂ« bĂ«jmĂ« ndonjĂ« ndryshim nĂ« kod nĂ« varĂ«si tĂ« versionit tĂ« Revit pĂ«r tĂ« cilin po krijojmĂ« plUGININ. PĂ«r tĂ« zgjidhur kĂ«to dallime nĂ« kod, do tĂ« pĂ«rdorim simbolet e kompilimit tĂ« kushteve. Hapim pronat e projektit, kalojmĂ« nĂ« tabin “NdĂ«rtimi” dhe nĂ« fushĂ«n “Simbolet e kompilimit tĂ« kushteve” do tĂ« shkruajmĂ« R2015.

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

Vini re se simbolet duhet të shtohen për konfigurimin Debug dhe për konfigurimin Release.

Dhe ndĂ«rsa jemi nĂ« dritaren e pronave, kalojmĂ« menjĂ«herĂ« nĂ« tabin “Aplikacioni” dhe nĂ« fushĂ«n “Hapesira e emrit pĂ«r default” dhe heqim sufiksin _2015, pĂ«r t'i dhĂ«nĂ« hapĂ«sirĂ«s sĂ« emrit universale dhe tĂ« pavarur nga emri i paketĂ«s:

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

Në rastin tim, në produktin përfundimtar, plUGIns e të gjitha versioneve grumbullohen në një dosje, prandaj emrat e paketës mbeten me sufiksin e tipit _20xx. Por ju mund ta hiqni sufiksin dhe nga emri i paketës, nëse parashikohet vendosja e skedarëve në dosje të ndryshme.

Tani kalojmë në kodin e skedarit Class1.cs dhe imitojmë atje një kod duke marrë parasysh versionet e ndryshme të 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", "Përshëndetje Revit 2015");
#elif R2016
            TaskDialog.Show("ModPlus", "Përshëndetje Revit 2016");
#elif R2017
            TaskDialog.Show("ModPlus", "Përshëndetje Revit 2017");
#elif R2018
            TaskDialog.Show("ModPlus", "Përshëndetje Revit 2018");
#elif R2019
            TaskDialog.Show("ModPlus", "Përshëndetje Revit 2019");
#elif R2020
            TaskDialog.Show("ModPlus", "Përshëndetje Revit 2020");
#endif
            return Result.Succeeded;
        }
    }
}

Unë menjëherë kam marrë parasysh të gjitha versionet e Revit mbi versionin 2015 (të cilat ishin në momentin e shkruarjes së artikullit) dhe kam marrë parasysh prani e simboleve të kompilimit të kushteve, të cilat krijohen sipas një modeli të njëjtë.

Tani kalojmë në thelbin e projektit. Krijojmë një projekt të ri në zgjidhjen tonë, por tani për versionin e plUGINIT për Revit 2016. Përsërisim të gjitha hapat e përshkruar më sipër, përkatësisht, duke zëvendësuar numrin 2015 me numrin 2016. Por skedari Class1.cs nga projekti i ri do ta fshini.

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

Skedari me kodin e nevojshĂ«m - Class1.cs – tashmĂ« e kemi dhe na nevojitet thjesht tĂ« bĂ«jmĂ« njĂ« lidhje pĂ«r tĂ« nĂ« projektin e ri. Ka dy mĂ«nyra pĂ«r tĂ« shtuar lidhje:

  1. E gjatĂ« – klikojmĂ« me tĂ« djathtĂ«n mbi projektin, zgjidhni opsionin «Shto» -> «Elementi ekzistues», nĂ« dritaren qĂ« hapet gjejmĂ« skedarin e nevojshĂ«m dhe nĂ« vend tĂ« opsionit «Shto» zgjidhim opsionin «Shto si lidhje»

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

  1. I shkurtĂ«r – drejtpĂ«rdrejt nĂ« shfletuesin e zgjidhjeve zgjidhim skedarin e nevojshĂ«m (ose madje skedarĂ«. Mund tĂ« transferojmĂ« edhe tĂ«rĂ« dosjet) dhe i tĂ«rheqim nĂ« projektin e ri duke mbajtur tĂ« shtypur çelĂ«sin Alt. GjatĂ« tĂ«rheqjes, do tĂ« shihni se kur mbani çelĂ«sin Alt, kursori nĂ« mi Ă«shtĂ« duke u ndryshuar nga shenjĂ« plusi nĂ« njĂ« shenjĂ« shigjete.
    UPD: Kam bĂ«rĂ« pak trazira nĂ« kĂ«tĂ« paragraf — pĂ«r tĂ« transferuar disa skedarĂ« duhet tĂ« mbani tĂ« shtypur Shift+Alt!

Pas përfundimit të procedurës, do të kemi në projektin e dytë skedarin Class1.cs me ikonën përkatëse (shigjeta blu):

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

Në redaktorin e kodit, gjithashtu mund të zgjidhni në kontekstin e cilit projekt të shfaqni kodin, kjo do t'ju lejojë të shihni dhe të redaktoni kodin gjatë simboleve të ndryshueshmërisë kushtore:

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

Pas kĂ«saj skeme krijojmĂ« tĂ« gjitha projektet e tjera (2017-2020). NjĂ« tip — nĂ«se tĂ«rhiqni skedarĂ« nĂ« shfletuesin e zgjidhjeve jo nga projekti bazĂ«, por nga projekti ku ata janĂ« tashmĂ« tĂ« futur si lidhje, nuk Ă«shtĂ« e nevojshme tĂ« mbani tĂ« shtypur çelĂ«sin Alt!

MundĂ«sia e pĂ«rshkruar Ă«shtĂ« shumĂ« e mirĂ« deri nĂ« momentin e shtimit tĂ« njĂ« versioni tĂ« ri tĂ« plugin-it ose deri nĂ« shtimin e skedarĂ«ve tĂ« rinj nĂ« projekt – e gjithĂ« kjo bĂ«het shumĂ« e bezdisshme. Dhe sĂ« fundmi, papritmas kuptova se si ta zgjidh çdo gjĂ« me njĂ« projekt dhe tani kalojmĂ« nĂ« mĂ«nyrĂ«n e dytĂ«

Magjia e konfigurimeve

Kur keni lexuar deri këtu, mund të thoni: «Pse e përshkrove mënyrën e parë, nëse artikulli menjëherë flet për të dytën?!». E kam përshkruar të gjithë këtë për të qenë më e qartë se për çfarë na nevojiten simbolet e ndryshueshmërisë kushtore dhe në cilat vende projeketet tona ndryshojnë. Tani është më e qartë se cilat ndryshime të veçanta duhet të realizojmë, duke lënë vetëm një projekt.

Dhe që gjithçka të jetë më e dukshme, nuk do të krijojmë një projekt të ri, por do të bëjmë ndryshime në projektin tonë aktual, të krijuar me mënyrën e parë.

Së pari, hiqni të gjithë projektet nga zgjidhja përveç atij kryesorit (që përmban skedarët konkretë). Domethënë, projektet për versionet 2016-2020. Hapni dosjen me zgjidhjen dhe hiqni aty dosjet e këtyre projekteve.

Na ka mbetur njĂ« projekt nĂ« zgjidhje — MySuperPluginForRevit_2015. Hapni pronĂ«sitĂ« e tij dhe:

  1. Në skedën «Aplikacioni» hiqni sufixin nga emri i ndërtimit _2015 (më vonë do të bëhet e qartë pse)
  2. Në skedën «Ndërtimi» heqim simbolin e përkompilimit R2015 nga fusha përkatëse

VĂ«rejtje: nĂ« versionin e fundit tĂ« Visual Studio ka njĂ« defekt – simbolet e pĂ«rkompilimit nuk shfaqen nĂ« dritaren e pronĂ«s sĂ« projektit, ndonĂ«se ato janĂ« aty. NĂ«se e vĂ«reni kĂ«tĂ« defekt, duhet t'i hiqni ato manualisht nga faili .csproj. SidoqoftĂ«, na nevojitet tĂ« punojmĂ« me tĂ«, pra, le tĂ« lexojmĂ« mĂ« tutje.

Rinovojmë projektin në dritaren e shfletuesit të zgjidhjeve duke hequr sufixin _2015 dhe pastaj e heqim projektin nga zgjidhja. Kjo është e nevojshme për të mbajtur rendin dhe ndjenjat e perfeksionistëve! Hapim dosjen tonë të zgjidhjes, e rinovojmë në të njëjtën mënyrë dosjen e projektit dhe e ngarkojmë përsëri projektin në zgjidhje.

Hapim menaxherin e konfigurimeve. Na nevojitet konfigurimi Release në parim nuk do të na duhet, kështu që e heqim. Krijojmë konfigurime të reja me emrat tanë të njohur R2015, R2016, 
, R2020. Vini re se nuk është e nevojshme të kopjoni parametrat nga konfigurime të tjera dhe nuk është e nevojshme të krijoni konfigurime projekti:

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

Shkoni nĂ« dosjen me projektin dhe hapni skedarin me zgjerim .csproj nĂ« redaktorin qĂ« preferoni. Duke e pĂ«rmendur kĂ«tĂ«, mund ta hapni edhe nĂ« Visual Studio – duhet tĂ« shkarkoni projektin dhe pastaj nĂ« menunĂ« kontekstuale do tĂ« jetĂ« opsioni i nevojshĂ«m:

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

Edyj në Visual Studio madje është më e preferueshme, pasi redaktori e rregullon dhe jep sugjerime.

NĂ« skedarin do tĂ« shohim elementĂ«t PropertyGroup – nĂ« krye Ă«shtĂ« e pĂ«rbashkĂ«t, dhe mĂ« pas vijnĂ« ato me kushte. KĂ«ta elementĂ« vendosin pronat e projektit gjatĂ« ndĂ«rtimit tĂ« tij. Elementi i parĂ«, i cili Ă«shtĂ« pa kushte, vendos pronat e pĂ«rbashkĂ«ta, ndĂ«rsa elementĂ«t me kushte, pĂ«rkatĂ«sisht, ndryshojnĂ« disa prona nĂ« varĂ«si tĂ« konfigurimve.

Kalohet nĂ« elementin e pĂ«rbashkĂ«t (tĂ« parĂ«) PropertyGroup dhe shohim pronĂ«n AssemblyName – kjo Ă«shtĂ« emri i mbledhjes dhe duhet tĂ« jetĂ« pa sufix _2015. NĂ«se ka sufix, atĂ«herĂ« hiqeni atĂ«.

Gjej elementin me kushte

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

Kjo nuk na nevojitet – e heqim atĂ«.

Elementi me kushte

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

do tĂ« na nevojitet pĂ«r punĂ«n nĂ« fazĂ«n e zhvillimit dhe debugs tĂ« kodit. Mund ta ndryshoni pronĂ«n sipas nevojave tuaja – tĂ« vendosni rrugĂ« tĂ« ndryshme tĂ« daljes, tĂ« ndryshoni simbolet e pĂ«rkompilimit etj.

Tani krijojmë elemente të reja PropertyGroup për konfigurimet tona. Në këto elemente na mjafton të vendosim katër prona:

  • OutputPath – dosja e daljes. UnĂ« vendos njĂ« vlerĂ« standarde binR20xx
  • DefineConstants – simbolet e kompilimit tĂ« kushtĂ«zuar. Duhet tĂ« caktohet vlera TRACE;R20xx
  • TargetFrameworkVersion – versioni i platformĂ«s. PĂ«r versione tĂ« ndryshme tĂ« Revit API duhet tĂ« caktohen platforma tĂ« ndryshme.
  • AssemblyName – emri i mbledhjes (dmth emri i skedarit). Mund tĂ« shkruani emrin e drejtpĂ«rdrejtĂ« tĂ« mbledhjes, por pĂ«r universalitetin e saj, ju rekomandoj tĂ« shkruani vlerĂ«n $(AssemblyName)_20xx. PĂ«r kĂ«tĂ«, ne mĂ« parĂ« e hiqnim sufixin nga emri i mbledhjes

Tipari më i rëndësishëm i gjithë këtyre elementeve është që ato mund të kopjohen thjesht në projekte të tjera pa e ndryshuar fare. Më poshtë në artikull do të përfshij përmbajtjen e skedarit .csproj.

MirĂ«, u merremi me pronat e projektit – nuk Ă«shtĂ« e vĂ«shtirĂ«. Por çfarĂ« tĂ« bĂ«jmĂ« me bibliotekat e lidhura (paketave NuGet). NĂ«se shikoni mĂ« tej, do tĂ« shihni se bibliotekat e lidhura caktohen nĂ« elementet ItemGroup. Por kĂ«tu Ă«shtĂ« njĂ« problem – ky element e pĂ«rpunon gabim kushtet, siç e bĂ«n elementi PropertyGroup. Ndoshta kjo Ă«shtĂ« njĂ« defekt nĂ« Visual Studio, por nĂ«se caktoni disa elemente ItemGroup me kushtet e konfigurimeve, dhe brenda shtoni lidhje tĂ« ndryshme nĂ« paketat NuGet, atĂ«herĂ« gjatĂ« ndryshimit tĂ« konfigurimit tĂ« projektit, lidhin tĂ« gjitha paketat e caktuara.

Elementi na ndihmon Zgjidhni, i cili funksionon sipas logjikës që na është njohur if-then-else.

Duke përdorur elementin Zgjidhni, caktojmë paketa të ndryshme NuGet për konfigura të ndryshme:

Të gjithë përmbajtjen csproj

Debug
    AnyCPU
    {5AD738D6-4122-4E76-B865-BE7CE0F6B3EB}
    Library
    Properties
    MySuperPluginForRevit
    MySuperPluginForRevit
    v4.5
    512
    true
  
  
    true
    full
    false
    binDebug
    DEBUG;R2015
    prompt
    4
  
  
    binR2015
    TRACE;R2015
    v4.5
    $(AssemblyName)_2015
  
  
    binR2016
    TRACE;R2016
    v4.5
    $(AssemblyName)_2016
  
  
    binR2017
    TRACE;R2017
    v4.5.2
    $(AssemblyName)_2017
  
  
    binR2018
    TRACE;R2018
    v4.5.2
    $(AssemblyName)_2018
  
  
    binR2019
    TRACE;R2019
    v4.7
    $(AssemblyName)_2019
  
  
    binR2020
    TRACE;R2020
    v4.7
    $(AssemblyName)_2020
  
  
    
    
    
    
    
    
    
    
  
  
    
    
  
  
    
      
        
          1.0.0
          runtime
        
      
    
    
      
        
          1.0.0
          runtime
        
      
    
    
      
        
          1.0.0
          runtime
        
      
    
    
      
        
          1.0.0
          runtime
        
      
    
    
      
        
          1.0.0
          runtime
        
      
    
    
      
        
          1.0.0
          runtime

Vini re nga një nga kushtet e mia përmenda dy konfigura përmes OSE (Or). Kështu do të lidhim paketën e nevojshme gjatë konfigurimit Debug.

Dhe këtu pothuajse gjithçka është në rregull. Ngarko përsëri projektin, aktivizo konfigurimin e nevojshëm, thirri në menusë kontekstuale të zgjidhjes (jo të projektit) opsionin «Rivendos të gjitha paketat NuGet» dhe shohim si na ndryshojnë paketat.

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

Dhe nĂ« kĂ«tĂ« fazĂ« u binda se isha nĂ« njĂ« rrugĂ« pa dalje – pĂ«r tĂ« ndĂ«rtuar tĂ« gjitha konfiguratat menjĂ«herĂ«, ne mund tĂ« pĂ«rdorim ndĂ«rtimin me grup (menunĂ« «NdĂ«rtimi» -> «NdĂ«rtim i grupit»), por gjatĂ« kalimit tĂ« konfigurimeve nuk ndodhi rikuperimi automatik i paketave. Dhe as gjatĂ« ndĂ«rtimit tĂ« projektit nuk ndodhi, edhe pse, nĂ« teorinĂ«, duhet tĂ« ndodhte. Nuk gjetĂ«m zgjidhje standarde pĂ«r kĂ«tĂ« problem. ËshtĂ« shumĂ« e mundshme qĂ« kjo tĂ« jetĂ« gjithashtu njĂ« defekt i Visual Studio.

Prandaj, pĂ«r ndĂ«rtimin me grup, u vendos tĂ« pĂ«rdoret njĂ« sistem i veçantĂ« i ndĂ«rtimit tĂ« automatizuar Nuke. NĂ« tĂ« vĂ«rtetĂ«, unĂ« nuk e doja kĂ«tĂ«, pasi e shoh si tĂ« tepruar nĂ« kuadĂ«r tĂ« zhvillimit tĂ« pluginĂ«ve, por pĂ«r momentin nuk shoh zgjidhje tjetĂ«r. Dhe pĂ«r pyetjen «Pse Nuke?» pĂ«rgjigja Ă«shtĂ« e thjeshtĂ« – e pĂ«rdorim nĂ« punĂ«.

Pra, kalojmĂ« nĂ« dosjen e zgjidhjes sonĂ« (jo tĂ« projektit), mbajmĂ« tĂ« shtypur tastin Shift dhe klikojmĂ« me butonin e djathtĂ« tĂ« mouse-it mbi njĂ« vend tĂ« lirĂ« nĂ« dosje – nĂ« menusĂ« kontekstuale zgjedhim opsionin «Hap dritaren PowerShell kĂ«tu».

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

Nëse nuk e keni instaluar nuke, atëherë së pari shkruani komandën

dotnet tool install Nuke.GlobalTool –global

Tani shkruani komandĂ«n nuke dhe do t'ju propozohet tĂ« konfiguroni nuke pĂ«r projektin aktual. Nuk e di si ta shkruaj mĂ« mirĂ« kĂ«tĂ« nĂ« shqip – nĂ« anglisht do tĂ« shkruhet Could not find .nuke file. Do you want to setup a build? [y/n]

Shtypni tastin Y dhe më pas do të jenë piketat e konfigurimit. Na nevojitet opsioni më i thjeshtë duke përdorur MSBuild, prandaj përgjigjemi siç është në screenshot:

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

TĂ« kalojmĂ« nĂ« Visual Studio, e cila do tĂ« na ofrojĂ« tĂ« rindezim zgjidhjen, pasi u shtuam njĂ« projekt tĂ« ri. Rindizim zgjidhjen dhe shohim se na ka dalĂ« projekti build ku na intereson vetĂ«m njĂ« skedar – Build.cs

Po krijojmë një projekt plugini me kompilimin nën versione të ndryshme të Revit/AutoCAD.

Hapim këtë skedar dhe shkruajmë skriptin për ndërtimin e projektit për të gjitha konfiguratat. Ose përdorim skriptin tim, të cilin mund ta redaktoni sipas nevojës tuaj:

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

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

    [Solution] readonly Solution Solution;

    // Nëse emri i zgjidhjes dhe emri i projektit (plugin) janë të ndryshëm, atëherë tregoni emrin e projektit (plugin) këtu
    string PluginName => Solution.Name;

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

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

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

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

                build.Add(configuration);

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

Kthehemi në dritaren PowerShell dhe sërish shkruajmë komandën nuke (mund të shkruani komandën nuke duke specifikuar atë të nevojshme Objektivi. Por ne kemi një Objektivi, që ekzekutohet automatikisht). Pas shtypjes së çelësit Enter, do ta ndiejmë veten si hakerë të vërtetë, sepse ashtu si në film do të ndodhë ndërtimi automatik i projektit tonë për konfigurata të ndryshme.

Pershendetje, mund të përdorni PowerShell direkt nga Visual Studio (menuja "Pamja» -> «Dritare të tjera» -> «Konsola e menaxherit të paketave"), por atje gjithçka do të jetë në bardh e zi, që nuk është shumë e përshtatshme.

Me këtë, artikulli im përfundon. Jam i sigurt se do të mund të kuptoni versionin për AutoCAD vetë. Shpresoj që materiali i paraqitur këtu do të gjejë "klientët" e tij.

Faleminderit për vëmendjen!

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster