Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

Kur zhvilloni plugina pĂ«r aplikacionet CAD (nĂ« rastin tim kjo Ă«shtĂ« AutoCAD, Revit dhe Renga) me kalimin e kohĂ«s shfaqet njĂ« problem – dalin versione tĂ« reja tĂ« softuerit, merr jetĂ« njĂ« API e re dhe nevojitet tĂ« krijohen versione tĂ« reja tĂ« pluginave.

Kur keni vetëm një plugin ose jeni ende një fillestar i vetë-mësuar në këtë fushë, mund ta bëni thjesht një kopje të projektit, të ndërroni vendet e nevojshme në të dhe të krijoni një version të ri të pluginës. Si rrjedhojë, çdo ndryshim i mëtejmë në kod do të rezultojë në një rritje të konsiderueshme të punës.

Me rritjen e përvojës dhe dijes, do të gjeni disa mënyra për të automatizuar këtë proces. Kam kaluar këtë rrugë dhe dua t'ju tregoj se çfarë kam arritur dhe sa e lehtë është kjo.

Së pari, le të shqyrtojmë një metodë që është e dukshme dhe që unë 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ë, të qartë dhe të kuptueshme, do ta përshkruaj gjithçka në një shembull abstrakt të zhvillimit të pluginës.

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

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

Ne do ta bëjmë një plugin për Revit për versionet 2015-2020. Prandaj do të krijoj një projekt të ri në zgjidhje (Biblioteka e klasave Net Framework) dhe do ta quajmë MySuperPluginForRevit_2015

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

Na nevojitet të shtojmë lidhje në API-në e Revit. Sigurisht, mund të shtojmë lidhje në skedarë lokalë (duhet të instaloni të gjithë 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 paketat e mia.

Pas lidhjes sĂ« paketĂ«s, klikoni me butonin e djathtĂ« nĂ« pikĂ«n "Linke" dhe zgjidhni nga menuja opsionin "Transfero packages.config nĂ« PackageReference »

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

NĂ«se ndonjĂ«herĂ« kĂ«tu ju fillon panic, pasi nĂ« dritaren e pronarĂ«ve tĂ« paketĂ«s nuk do tĂ« ketĂ« pikĂ«n e rĂ«ndĂ«sishme "Kopjo lokal", qĂ« ne patjetĂ«r duhet ta vendosim nĂ« vlerĂ«n false, nuk duhet tĂ« panicni – shkojmĂ« nĂ« dosjen e projektit, hapim skedarin me shtrirje .csproj nĂ« redaktorin tuaj tĂ« preferuar (unĂ« pĂ«rdor Notepad++) dhe gjejmĂ« aty regjistrimin pĂ«r paketĂ«n tonĂ«. Ajo duket tani kĂ«shtu:

1.0.0

Shtojmë atij një pronë runtime. Do të duket kështu:

1.0.0
  runtime

Tani, kur ndërtojmë projektin, skedarët nga paketa nuk do të kopohen në dosjen përfundimtare.
TĂ« kalojmĂ« mĂ« tej – le tĂ« supozojmĂ« se plugin-i ynĂ« do tĂ« pĂ«rdorĂ« diçka nga Revit API, e cila ka ndryshuar me kalimin e kohĂ«s me versionet e reja. Ose ndoshta thjesht na duhet tĂ« ndryshojmĂ« diçka nĂ« kod nĂ« varĂ«si tĂ« versionit tĂ« Revit pĂ«r tĂ« cilin po krijojmĂ« plugin-in. PĂ«r tĂ« zgjidhur kĂ«to ndryshime nĂ« kod, do tĂ« pĂ«rdorim simbolet e kompilimit tĂ« kushtozuar. Do tĂ« hapim pronat e projektit, do tĂ« kalojmĂ« nĂ« tabin “NdĂ«rtimi” dhe nĂ« fushĂ«n “Simbolet e kompilimit tĂ« kushtozuar” do tĂ« shkruajmĂ« R2015.

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

Vini re se simboli duhet të shtohet si për konfigurimin Debug ashtu dhe për konfigurimin Release.

Dhe derisa jemi nĂ« dritaren e pronave, menjĂ«herĂ« kalojmĂ« nĂ« tabin “Aplikacioni” dhe nĂ« fushĂ«n “HapĂ«sira e emrave tĂ« paracaktuar” dhe heqim sufiksin _2015, nĂ« mĂ«nyrĂ« qĂ« hapĂ«sira jonĂ« e emrave tĂ« jetĂ« universale dhe e pavarur nga emri i paketĂ«s:

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

Në rastin tim, në produktin përfundimtar, pluginet e të gjitha versioneve vendosen në një dosje, kështu që emrat e paketave mbeten me një sufiks si _20xx. Por ju mund të hiqni prapashtesën edhe nga emri i ndërtimit, nëse parashikohet vendosja e skedarëve në dosje të ndryshme.

Për parashkrimin e skedarit Class1.cs dhe simuloni 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", "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;
        }
    }
}

Menjëherë kam marrë parasysh të gjitha versionet e Revit pas versionit 2015 (të cilat ishin në momentin e shkruajtjes së artikullit) dhe menjëherë kam marrë parasysh praninë e simboleve të përpilimit të kushtuar, të cilat krijohen në një model të njëjtë.

Kalo në qershinë kryesore. Krijo një projekt të ri në zgjidhjen tonë, vetëm për versionin e plugins për Revit 2016. Përsëritni të gjitha veprimet e përshkruara më sipër, duke zëvendësuar numrin 2015 me numrin 2016. Por skedari Class1.cs nga projekti i ri e fshijmë.

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

Skedha me kodin e nevojshĂ«m – Class1.cs – ne e kemi tashmĂ« dhe na nevojitet thjesht ta vendosim lidhjen nĂ« projektin e ri. Ka dy mĂ«nyra pĂ«r tĂ« futur lidhje:

  1. E gjatĂ« – klikoni me tĂ« djathtĂ«n nĂ« projekt, zgjidhni opsionin "Shto" -> "Element ekzistues", nĂ« dritaren qĂ« hapet, gjeni skedhin e nevojshme dhe nĂ« vend tĂ« opsionit "Shto" zgjidhni opsionin "Shto si lidhje»

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

  1. E shkurtĂ«r – direkt nĂ« shfletuesin e zgjidhjeve zgjidhni skedhĂ«n e nevojshme (ose madje skeda tĂ« shumta. Po ashtu, mund tĂ« tĂ«rhiqni gjithashtu tĂ« gjithĂ« dosjet) dhe tĂ«rhiqni nĂ« projektin e ri me duke mbajtur tĂ« shtypur çelĂ«sin Alt. GjatĂ« tĂ«rheqjes do tĂ« shihni se, kur tĂ« shtypni çelĂ«sin Alt, kursori nĂ« miq do tĂ« ndryshojĂ« nga plusi nĂ« shigjetĂ«.
    UPD: Kam sjellĂ« pak ngatĂ«rrim nĂ« kĂ«tĂ« paragraf – pĂ«r tĂ« pĂ«rbazur disa skeda duhet tĂ« mbani tĂ« shtypur Shift+Alt!

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

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

Gjatë redaktimit të kodit në dritaren e redaktorit, ju gjithashtu mund të zgjidhni kontekstin e projektit në të cilin shfaqet kodi, që do t'ju lejojë të shihni dhe redaktoni kodin me simbole të ndryshme të kompilimit të kushtëzuar:

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

Sipas kĂ«saj skeme krijojmĂ« tĂ« gjitha projektet e tjera (2017-2020). NjĂ« kĂ«shillĂ« – nĂ«se tĂ«rheqni skedarĂ«t 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 shtypur çelĂ«sin Alt!

Kjo mĂ«nyrĂ« Ă«shtĂ« plotĂ«sisht e mirĂ« deri nĂ« momentin kur shtohet njĂ« version i ri i plugit ose shtohet nĂ« projekt skedarĂ« tĂ« rinj – tĂ« gjitha kĂ«to bĂ«hen shumĂ« tĂ« lodhshme. Dhe sĂ« fundmi, papritur e kuptova se si tĂ« menaxhoj tĂ« gjitha kĂ«to me njĂ« projekt dhe tani kalojmĂ« nĂ« mĂ«nyrĂ«n e dytĂ«.

Magjia e konfigurimeve

Pas leximit deri këtu, mund të thoni: "Pse e përmende mënyrën e parë, nëse artikulli është menjëherë për të dytën?!" E përmenda që të bëhet më e qartë përse na duhen simbolet e kompilimit të kushtëzuar dhe në cilat vende projektet tona ndryshojnë. Tani na bëhet më e qartë se cilat dallime të projekteve duhet të realizojmë, duke lënë vetëm një projekt.

Dhe për të qenë më të qartë, ne nuk do të krijojmë një projekt të ri, por do të bëjmë ndryshime në projektin tonë aktual, të krijuar në mënyrën e parë.

Së pari, hiqni të gjitha projektet nga zgjidhja, përveç atij kryesor (që përmban skedarët). Pra, projektet për versionet 2016-2020. Hyni në dosjen e zgjidhjes dhe hiqni dosjet e këtyre projekteve.

NĂ« zgjidhjen tonĂ« ka mbetur njĂ« projekt — MySuperPluginForRevit_2015. Hyni nĂ« pronat e tij dhe:

  1. Në skedën «Aplikacioni» hiqni sufiksin nga emri i ndërtimit _2015 (shpejt do të bëhet e qartë përse)
  2. Në skedën «Ndërtimi» hiqni simbolin e përpunimit të kushtëzuar R2015 nga fusha përkatëse

ShĂ«nim: nĂ« versionin mĂ« tĂ« fundit tĂ« Visual Studio ka njĂ« defekt – simbolet e pĂ«rpunimit tĂ« kushtĂ«zuar nuk shfaqen nĂ« dritaren e pronave tĂ« projektit, megjithĂ«se ato janĂ« aty. NĂ«se keni kĂ«tĂ« defekt, duhet t'i hiqni ato manualisht nga skedari .csproj. MegjithatĂ«, duhet tĂ« punojmĂ« nĂ« tĂ«, kĂ«shtu qĂ« lexoni mĂ« tej.

Riname projektin në dritaren e shfletuesit të zgjidhjeve, duke hequr sufiksin _2015 dhe pastaj hiqni projektin nga zgjidhja. Kjo është e nevojshme për të mbajtur rendin dhe ndjenjat e perfekcionistëve! Hyni në dosjen e zgjidhjes sonë, rinomoni dosjen e projektit ashtu siç është dhe ngarkoni përsëri projektin në zgjidhje.

Hyni në menaxherin e konfigurimeve. Na nevojitet konfigurimi Release në parim nuk do të nevojitet, prandaj e fshijmë atë. Krijojmë konfigurime të reja me emra që tashmë i njohim R2015, R2016, 
, R2020. Vini re se nuk është e nevojshme të kopjoni parametrat nga konfigurimet e tjera dhe nuk është e nevojshme të krijoni konfigurime projekti:

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

Shkoni nĂ« dosjen me projektin dhe hapni skedarin me zgjerim .csproj nĂ« redaktorin qĂ« ju pĂ«rshtatet. Nga ana tjetĂ«r, mund ta hapni edhe nĂ« Visual Studio – duhet tĂ« shkarkoni projektin dhe pastaj nĂ« menunĂ« kontekstuale do tĂ« ketĂ« opsionin e nevojshĂ«m:

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

Editimi në Visual Studio është edhe më i preferueshëm, pasi redaktori rregullon dhe sugjeron.

NĂ« skedar do tĂ« shohim elementĂ«t PropertyGroup – nĂ« krye shkojnĂ« ato tĂ« pĂ«rgjithshme, dhe pas tyre shkojnĂ« ato me kushte. KĂ«ta elementĂ« pĂ«rcaktojnĂ« pronat e projektit gjatĂ« ndĂ«rtimit tĂ« tij. Elementi i parĂ«, qĂ« Ă«shtĂ« pa kushte, pĂ«rcakton pronat e pĂ«rgjithshme, ndĂ«rsa elementĂ«t me kushte, pĂ«rkatĂ«sisht, ndryshojnĂ« disa prona nĂ« varĂ«si tĂ« konfigurimeve.

KalojmĂ« te elementi i pĂ«rgjithshĂ«m (i pari) PropertyGroup dhe shikojmĂ« pronĂ«n AssemblyName – ky Ă«shtĂ« emri i ndĂ«rtimit dhe duhet tĂ« jetĂ« pa suffiks _2015. NĂ«se ka njĂ« suffiks, atĂ«herĂ« e fshijmĂ« atĂ«.

Gjejmë elementin me kusht

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

Ai nuk na nevojitet – e fshijmĂ« atĂ«.

Elementi me kusht

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

do të nevojitet për të funksionuar gjatë fazës së zhvillimit dhe zhdemosjes së kodit. Mund të ndryshoni pronat e tij sipas nevojave tuaja - të caktoni rrugë të ndryshme dalëse, të ndryshoni simbolet e kompilimit të kushtit, etj.

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

  • OutputPath – dosja dalĂ«se. UnĂ« caktoj njĂ« vlerĂ« standarde binR20xx
  • DefineConstants – simbolet e kompilimit tĂ« kushtit. Duhet tĂ« caktoni vlerĂ«n TRACE;R20хх
  • TargetFrameworkVersion – versione e platformĂ«s. PĂ«r versione tĂ« ndryshme tĂ« Revit API duhet tĂ« caktoni platforma tĂ« ndryshme.
  • AssemblyName – emri i ndĂ«rtimit (dmth. emri i skedarit). Mund tĂ« shkruani emrin e duhur tĂ« ndĂ«rtimit, por pĂ«r universialitetin, unĂ« rekomandoj tĂ« shkruani vlerĂ«n $(AssemblyName)_20хх. PĂ«r kĂ«tĂ« e kemi hequr mĂ« parĂ« sufiksin nga emri i ndĂ«rtimit

Karakteristika më e rëndësishme e të gjithë këtyre elementeve është se mund të kopjohen thjesht në projekte të tjera pa asnjë ndryshim. Më poshtë në artikull do të bashkëngjitur të gjitha përmbajtjet e skedës .csproj.

MirĂ«, kemi trajtuar pronat e projektit – nuk Ă«shtĂ« e vĂ«shtirĂ«. Por çfarĂ« tĂ« bĂ«jmĂ« me bibliotekat e lidhura (paketave NuGet). NĂ«se shikojmĂ« mĂ« tej, do tĂ« shohim se bibliotekat e lidhura pĂ«rcaktohen nĂ« elementin ItemGroup. Por ja njĂ« problem – ky element i pĂ«rpunon gabimisht kushtet, si element PropertyGroup. Ndoshta Ă«shtĂ« njĂ« gabim i Visual Studio, por nĂ«se pĂ«rcaktojmĂ« disa elemente ItemGroup me kushtet e konfigurimeve, dhe brenda vendosim lidhje tĂ« ndryshme pĂ«r paketat NuGet, atĂ«herĂ« gjatĂ« ndryshimit tĂ« konfigurimit, tĂ« gjitha paketat e pĂ«rmendura lidhen me projektin.

Elementi na vjen në ndihmë Zgjidhni, i cili funksionon sipas logjikës sonë të njohur nëse-atëherë-ndryshe.

Duke përdorur elementin Zgjidhni, përcaktojmë paketat e ndryshme NuGet për konfigurime të ndryshme:

E gjithë përmbajtja 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, se në një nga kushtet kam treguar dy konfiguracione përmes OSE (Or). Kështu do të lidhet paketa e nevojshme gjatë konfigurimit Debug.

Dhe ja, gati të gjithçka është perfekte. Ngarkojmë përsëri projektin, aktivizojmë konfigurimin që na nevojitet, thërrasim në menunë kontekstuale të zgjidhjes (jo të projektit) opsionin «Rivendos të gjitha paketat NuGet» dhe shohim si ndryshojnë paketat.

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

Dhe nĂ« kĂ«tĂ« pikĂ« kam mbetur nĂ« njĂ« shkĂ«putje – pĂ«r tĂ« ndĂ«rtuar tĂ« gjitha konfiguracionet menjĂ«herĂ« do tĂ« pĂ«rdornim ndĂ«rtimin e paketĂ«s (nĂ« menunĂ« «NdĂ«rtimi" -> "NdĂ«rtimi i PaketĂ«s»), por kur kalojmĂ« nĂ« konfiguracione, rikuperimi automatik i paketave nuk ndodh. As gjatĂ« ndĂ«rtimit tĂ« projektit nuk ndodh, megjithĂ«se, teorikisht, duhet. Nuk kam gjetur zgjidhje pĂ«r kĂ«tĂ« problem me mjetet standarde. Dhe mĂ« sĂ« shpejti, ky Ă«shtĂ« gjithashtu njĂ« gabim nĂ« Visual Studio.

Prandaj, pĂ«r ndĂ«rtimin e paketĂ«s, u vendos tĂ« pĂ«rdoret njĂ« sistem i veçantĂ« i ndĂ«rtimit automatizuar Nuke. NĂ« tĂ« vĂ«rtetĂ«, nuk doja kĂ«tĂ«, pasi e mendoj tĂ« tepruar pĂ«r zhvillimin e plugins, por aktualisht nuk shoh njĂ« zgjidhje tjetĂ«r. Dhe ndaj pyetjes «Pse pikĂ«risht Nuke?» pĂ«rgjigja Ă«shtĂ« e thjeshtĂ« – e pĂ«rdorim nĂ« punĂ«.

Tani, kalojmĂ« nĂ« dosjen e zgjidhjes sonĂ« (jo projektit), mbajmĂ« tĂ« shtypur çelĂ«sin Shift dhe klikojmĂ« me tĂ« djathtĂ«n nĂ« njĂ« vend tĂ« lirĂ« nĂ« dosje – nĂ« menunĂ« kontekstore zgjedhim opsionin "Hapni dritaren PowerShell kĂ«tu"».

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme 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Ă« konfiguroheni nuke pĂ«r projektin aktual. Nuk e di si ta shkruaj mĂ« saktĂ« nĂ« gjuhĂ«n shqipe – nĂ« anglisht do tĂ« shkruhet Could not find .nuke file. Do you want to setup a build? [y/n]

Shtypim çelësin Y dhe më pas do të kemi hapat e konfigurimit. Na nevojitet opsioni më i thjeshtë me përdorimin e MSBuild, prandaj përgjigjemi si në screenshot:

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

TĂ« kalojmĂ« nĂ« Visual Studio, e cila do tĂ« na propozojĂ« tĂ« rinisim zgjidhjen, pasi u shtua njĂ« projekt i ri. Rinisim zgjidhjen dhe shohim se kemi njĂ« projekt ndĂ«rto ku na intereson vetĂ«m njĂ« skedar – Build.cs

Ne krijojmë një projekt plugin me kompilim për versione të ndryshme Revit/AutoCAD

E hapim këtë skedar dhe shkruajmë skriptin për ndërtimin e projektit nën të gjitha konfigurimet. Ose përdorni skriptin tim, të cilin mund ta redaktoni për vete:

përdorim System.IO;
përdorim Nuke.Common;
përdorim Nuke.Common.Execution;
përdorim Nuke.Common.ProjectModel;
përdorim Nuke.Common.Tools.MSBuild;
përdorim static Nuke.Common.Tools.MSBuild.MSBuildTasks;

[CheckBuildProjectConfigurations]
[UnsetVisualStudioEnvironmentVariables]
klasa Build : NukeBuild
{
    publike static int Main () => Execute<Build>(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<string>();
            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("Restauro"));
                MSBuild(_ => _
                    .SetProjectFile(project.Path)
                    .SetConfiguration(configuration)
                    .SetTargets("Rinderto"));
            }
        });
}

Kthehemi në dritaren PowerShell dhe përsërisim komandën nuke (mund të shkruani komandën nuke duke treguar atë që nevojitet Objektivi. Por ne kemi një Objektivi, i cili fillon automatikisht). Pas shtypjes së butonit Enter do të ndiheni si hakerë të vërtetë, sepse në mënyrë filmike do të ndodhi ndërtimi automatik i projektit tuaj për konfigurata të ndryshme.

PĂ«r mĂ« tepĂ«r, mund tĂ« pĂ«rdorni PowerShell direkt nga Visual Studio (menyja “Pamja" -> "Dritaret e tjera" -> "Konsola e menaxherit tĂ« paketave”), por atje do tĂ« jetĂ« gjithçka nĂ« bardh e zi, çka nuk Ă«shtĂ« shumĂ« e ndiheshme.

KĂ«tu mbaron artikulli im. Jam i sigurt qĂ« me variantin pĂ«r AutoCAD do tĂ« jeni nĂ« gjendje ta kuptoni vetĂ«. Shpresoj qĂ« materiali i paraqitur kĂ«tu tĂ« gjejĂ« “klientĂ«t” e tij.

Faleminderit për vëmendjen!

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster