Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

CAD aplikazioetarako pluginak garatzean (nire kasuan hauek AutoCAD, Revit eta Renga dira) denborarekin, arazo bat agertzen da - programen bertsio berriak kaleratzen dira, haien API aldaketak eta pluginen bertsio berriak egin behar dira.

Plugin bakarra duzunean edo oraindik gai honetan autodidakta hasiberria zarenean, proiektuaren kopia bat egin dezakezu, bertan behar diren lekuak aldatu eta pluginaren bertsio berri bat muntatu besterik ez duzu. Horren arabera, kodearen ondorengo aldaketek lan-kostuen igoera anitz ekarriko dute.

Esperientzia eta ezagutza lortu ahala, prozesu hau automatizatzeko hainbat modu aurkituko dituzu. Bide honetatik ibili naiz eta kontatu nahi dizut zertan geratu naizen eta zein erosoa den.

Lehenik eta behin, begi-bistakoa den eta denbora luzez erabili dudan metodo bat ikus dezagun.

Proiektuaren fitxategietarako estekak

Eta dena sinplea, bisuala eta ulergarria izan dadin, dena deskribatuko dut pluginen garapenaren adibide abstraktu bat erabiliz.

Ireki dezagun Visual Studio (Komunitatea 2019 bertsioa daukat. Eta bai - errusieraz) eta sortu irtenbide berri bat. Dei diezaiogun MySuperPluginForRevit

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

Revit-erako plugin bat egingo dugu 2015-2020 bertsioetarako. Beraz, sortu dezagun proiektu berri bat soluzioan (Net Framework Class Library) eta deitu MySuperPluginForRevit_2015

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

Revit APIra estekak gehitu behar ditugu. Noski, tokiko fitxategietara estekak gehi ditzakegu (beharrezko SDK guztiak edo Revit-en bertsio guztiak instalatu beharko ditugu), baina berehala bide egokia jarraituko dugu eta NuGet paketea konektatuko dugu. Pakete dezente aurki ditzakezu, baina nik neurea erabiliko dut.

Paketea konektatu ondoren, egin klik eskuineko botoiarekin "elementuan"Erreferentziak"eta hautatu elementua"Eraman packages.config PackageReferencera...Β»

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

Bat-batean une honetan izutzen hasten bazara, paketeen propietateen leihoan ez baita elementu garrantzitsurik egongo "Kopiatu lokalean", zalantzarik gabe, balioa ezarri behar dugu false, orduan ez beldurtu - joan proiektuaren karpetara, ireki .csproj luzapena duen fitxategia zuretzat komenigarria den editore batean (Notepad++ erabiltzen dut) eta aurkitu han gure paketeari buruzko sarrera bat. Honela dirudi orain:

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

Gehitu propietate bat exekuzioa. Honela aterako da:

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

Orain, proiektu bat eraikitzean, paketearen fitxategiak ez dira irteerako karpetara kopiatuko.
Goazen harago - imajina dezagun berehala gure pluginak Revit APIko zerbait erabiliko duela, bertsio berriak kaleratu direnean denborarekin aldatu dena. Beno, edo plugina egiten ari garen Revit-en bertsioaren arabera kodean zerbait aldatu behar dugu. Kodearen desberdintasun horiek konpontzeko, konpilazio baldintzazko ikurrak erabiliko ditugu. Ireki proiektuaren propietateak, joan β€œ fitxaramuntaia"eta eremuan"Konpilazio-notazio baldintzatua"idatz dezagun R2015.

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

Kontuan izan ikurra Araztu eta Askatu konfigurazioetarako gehitu behar dela.

Beno, propietateen leihoan gauden bitartean, berehala joango gara β€œ fitxaraEskaera"eta eremuan"Izen-espazio lehenetsiaΒ» atzizkia kendu _2015beraz, gure izen-espazioa unibertsala eta asanbladaren izenetik independentea izan dadin:

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

Nire kasuan, azken produktuan, bertsio guztietako pluginak karpeta batean jartzen dira, beraz, nire muntaia-izenak formaren atzizkiarekin geratzen dira _20Ρ…Ρ…. Baina atzizkia batzar-izenetik ere kendu dezakezu fitxategiak karpeta ezberdinetan kokatu behar badira.

Goazen fitxategi-kodera Class1.cs eta simulatu bertan kode batzuk, Revit-en bertsio desberdinak kontuan hartuta:

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;
        }
    }
}

Berehala 2015 bertsioaren gaineko Revit-en bertsio guztiak hartu nituen kontuan (idazteko unean eskuragarri zeuden) eta berehala kontutan hartu nuen baldintzazko konpilazio-sinboloen presentzia, txantiloi bera erabiliz sortzen direnak.

Goazen aipagarri nagusira. Proiektu berri bat sortzen dugu gure soluzioan, Revit 2016rako pluginaren bertsiorako soilik. Goian deskribatutako pauso guztiak errepikatzen ditugu, hurrenez hurren, 2015 zenbakia 2016 zenbakiarekin ordezkatuz. Baina fitxategia Class1.cs proiektu berritik ezabatu.

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

Artxiboa eskatutako kodearekin - Class1.cs – dagoeneko badugu eta proiektu berri batean harako esteka txertatu besterik ez dugu egin behar. Estekak txertatzeko bi modu daude:

  1. Luzea - Egin klik eskuineko botoiarekin proiektuan eta hautatu "GehituΒ»->Β«Dauden elementua", irekitzen den leihoan, bilatu behar den fitxategia eta aukeraren ordez "Gehitu"hautatu aukera"Gehitu konexio gisaΒ»

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

  1. laburrak - Zuzenean soluzio-esploratzailean, hautatu nahi duzun fitxategia (edo fitxategiak, edo baita karpeta osoak ere) eta arrastatu proiektu berri batera Alt tekla sakatuta mantenduz. Arrastatu ahala, Alt tekla sakatzean, saguaren kurtsorea plus zeinu batetik gezi batera aldatuko dela ikusiko duzu.
    UPS: Paragrafo honetan nahasmen txiki bat sortu dut: hainbat fitxategi transferitzeko sakatuta eduki behar duzu Maius + Alt!

Izapidea egin ondoren, bigarren proiektuan fitxategi bat izango dugu Class1.cs dagokion ikonoarekin (gezi urdina):

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

Editorearen leihoan kodea editatzean, kodea zein proiektu testuingurutan bistaratu ere aukeratu dezakezu, eta horrek baldintzapeko konpilazio ikur ezberdinetan editatzen ari den kodea ikusteko aukera emango dizu:

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

Beste proiektu guztiak (2017-2020) eskema hau erabiliz sortzen ditugu. Life hack - Soluzio arakatzailean fitxategiak arrastatzen badituzu ez oinarrizko proiektutik, baizik eta dagoeneko esteka gisa txertatuta dauden proiektutik, orduan ez duzu Alt tekla sakatu beharrik!

Deskribatutako aukera nahiko ona da pluginaren bertsio berri bat gehitzeko unera arte edo proiektuari fitxategi berriak gehitzeko unera arte - hori guztia oso neketsua bihurtzen da. Eta duela gutxi, bat-batean konturatu nintzen nola konpondu proiektu batekin eta bigarren metodora pasatzen ari gara

Konfigurazioen magia

Hemen irakurtzen amaitu ondoren, oihu egin dezakezu: "Zergatik deskribatu duzu lehen metodoa, artikulua berehala bigarrenari buruzkoa bada?!" Eta dena deskribatu nuen argiago argitzeko zergatik behar ditugun baldintzapeko bilketa-sinboloak eta gure proiektuak zein lekutan desberdinak diren. Eta orain argiago geratzen zaigu zehatz-mehatz zer desberdintasun ezarri behar ditugun proiektuetan, proiektu bakarra utziz.

Eta dena agerikoagoa izan dadin, ez dugu proiektu berririk sortuko, baizik eta aldaketak egingo ditugu lehen erara sortutako gure egungo proiektuan.

Beraz, lehenik eta behin, proiektu guztiak kentzen ditugu soluziotik nagusia izan ezik (fitxategiak zuzenean dituena). Horiek. 2016-2020 bertsioetarako proiektuak. Ireki irtenbidea duen karpeta eta ezabatu bertan proiektu horien karpetak.

Proiektu bat geratzen zaigu erabakian - MySuperPluginForRevit_2015. Ireki bere propietateak eta:

  1. Fitxan "Eskaera"Kendu atzizkia batzarraren izenetik _2015 (gero argituko da zergatik)
  2. Fitxan "muntaiaΒ» kendu baldintzazko konpilazio ikurra R2015 dagokion eremutik

Oharra: Visual Studio-ren azken bertsioak akats bat du - konpilazio baldintzapeko ikurrak ez dira bistaratzen proiektuaren propietateen leihoan, eskuragarri egon arren. Akats hau jasaten baduzu, eskuz kendu behar dituzu .csproj fitxategitik. Hala ere, oraindik lan egin behar dugu, beraz, jarraitu irakurtzen.

Aldatu izena proiektua Solution Explorer leihoan atzizkia kenduz _2015 eta gero kendu proiektua irtenbidetik. Hau beharrezkoa da ordena eta perfekzionisten sentimenduak mantentzeko! Gure soluzioaren karpeta irekitzen dugu, proiektuaren karpetari izena aldatuko diogu modu berean eta proiektua berriro kargatuko dugu soluzioan.

Ireki konfigurazio-kudeatzailea. AEBetako konfigurazioa Askatu printzipioz, ez da beharrezkoa izango, beraz, ezabatzen dugu. Konfigurazio berriak sortzen ditugu dagoeneko ezagunak zaizkigun izenekin R2015, R2016, ..., R2020. Kontuan izan ez duzula ezarpenak kopiatu behar beste konfigurazioetatik eta ez duzula proiektuaren konfiguraziorik sortu behar:

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

Joan proiektua duen karpetara eta ireki .csproj luzapena duen fitxategia zuretzat komeni den editore batean. Bide batez, Visual Studio-n ere ireki dezakezu - proiektua deskargatu behar duzu eta, ondoren, nahi duzun elementua laster-menuan egongo da:

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

Visual Studio-n editatzea hobe da, editoreak lerrokatzen eta galdetzen duelako.

Fitxategian elementuak ikusiko ditugu PropertyGroup – goialdean orokorra dago, eta gero baldintzak datoz. Elementu hauek proiektuaren propietateak ezartzen dituzte eraikitzen denean. Baldintzarik gabeko lehen elementuak propietate orokorrak ezartzen ditu, eta baldintzadun elementuek, horren arabera, propietate batzuk aldatzen dituzte konfigurazioen arabera.

Joan (lehen) elementu komunera PropertyGroup eta begiratu jabetza BatzarIzena – hau da batzarraren izena eta atzizkirik gabe eduki beharko genuke _2015. Atzizki bat badago, kendu.

Baldintza duen elementu bat aurkitzea

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

Ez dugu behar - ezabatzen dugu.

Baldintza duen elementua

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

beharrezkoa izango da kodearen garapen eta arazketa fasean lan egiteko. Bere propietateak alda ditzakezu zure beharretara egokitzeko - irteera-bide desberdinak ezarri, konpilazio baldintzazko ikurrak aldatu, etab.

Orain sor ditzagun elementu berriak PropertyGroup gure konfigurazioetarako. Elementu hauetan lau propietate ezarri behar ditugu:

  • Irteera-bidea - Irteera karpeta. Balio lehenetsia ezarri dut binR20xx
  • Definitu Konstanteak – baldintzapeko bilketa-ikurrak. Balioa zehaztu behar da TRAZA;R20Ρ…Ρ…
  • TargetFrameworkVersion - plataformaren bertsioa. Revit APIaren bertsio ezberdinek plataforma desberdinak zehaztu behar dituzte.
  • BatzarIzena – muntaia izena (hau da, fitxategiaren izena). Muntaiaren izen zehatza idatz dezakezu, baina aldakortasunerako balioa idaztea gomendatzen dut $(AssemblyName)_20Ρ…Ρ…. Horretarako, aldez aurretik atzizkia kendu genuen batzar-izenetik

Elementu horien guztien ezaugarririk garrantzitsuena da, besterik gabe, beste proiektu batzuetan kopiatu daitezkeela, batere aldatu gabe. Geroago artikuluan .csproj fitxategiaren eduki guztiak erantsiko ditut.

Ados, proiektuaren propietateak asmatu ditugu - ez da zaila. Baina zer egin plug-in liburutegiekin (NuGet paketeak). Gehiago begiratuz gero, ikusiko dugu sartutako liburutegiak elementuetan zehaztuta daudela ItemGroup. Baina zorte txarra - elementu honek oker prozesatzen ditu baldintzak elementu gisa PropertyGroup. Agian hau Visual Studio akats bat da, baina hainbat elementu zehazten badituzu ItemGroup konfigurazio-baldintzekin, eta sartu NuGet paketeetarako esteka desberdinak barruan, gero konfigurazioa aldatzen duzunean, zehaztutako pakete guztiak proiektura konektatzen dira.

Elementua gure laguntzara dator Aukeratu, gure ohiko logikaren arabera funtzionatzen duena bada-gero-bestela.

Elementua erabiliz Aukeratu, NuGet pakete desberdinak ezarri ditugu konfigurazio desberdinetarako:

Eduki guztiak 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>

Kontuan izan baldintzaren batean bi konfigurazio zehaztu ditudala bidez EDO. Horrela behar den paketea konektatuko da konfigurazioan zehar Arazteko.

Eta hemen ia dena perfektua dugu. Proiektua berriro kargatzen dugu, behar dugun konfigurazioa gaitu, elementuari " deitzen diogu irtenbidearen testuinguruko menuan (ez proiektua)Berreskuratu NuGet pakete guztiak"eta gure paketeak nola aldatzen diren ikusten dugu.

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

Eta fase honetan, muturreraino iritsi nintzen: konfigurazio guztiak aldi berean biltzeko, loteen muntaketa erabil genezake (menua "muntaiaΒ»->Β«Batch eraikitzea"), baina konfigurazioak aldatzean, paketeak ez dira automatikoki leheneratzen. Eta proiektua muntatzean, hori ere ez da gertatzen, teorian hala beharko lukeen arren. Ez dut arazo honi irtenbiderik aurkitu baliabide estandarrak erabiliz. Eta ziurrenik hau Visual Studio akats bat ere bada.

Horregatik, loteen muntaketa egiteko, muntaketa automatikoko sistema berezi bat erabiltzea erabaki zen Nuke. Egia esan, ez nuen hau nahi pluginen garapenari dagokionez gehiegizkoa iruditzen zaidalako, baina momentuz ez dut beste irtenbiderik ikusten. Eta "Zergatik Nuke?" galderari. Erantzuna erraza da: lanean erabiltzen dugu.

Beraz, joan gure soluzioaren karpetara (ez proiektua), eduki sakatuta tekla Shift eta egin klik eskuineko botoiarekin karpetako hutsune batean - laster-menuan hautatu elementua "Ireki PowerShell leihoa hemen'.

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

Ez baduzu instalatuta nuke, ondoren idatzi komandoa lehenik

dotnet tool install Nuke.GlobalTool –global

Orain idatzi komandoa nuke eta konfiguratzeko eskatuko zaizu nuke egungo proiekturako. Ez dakit nola idatzi hau zuzenago errusieraz - ingelesez idatziko da. Ezin izan da aurkitu .nuke fitxategia. Eraikuntza bat konfiguratu nahi duzu? [y/n]

Sakatu Y tekla eta gero zuzeneko ezarpen-elementuak egongo dira. Aukerarik errazena erabili behar dugu MSBuild, beraz, pantaila-argazkian bezala erantzungo dugu:

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

Goazen Visual Studiora, eta horrek irtenbidea berriro kargatzeko eskatuko digu, proiektu berri bat gehitu baita. Konponbidea berriro kargatzen dugu eta proiektu bat dugula ikusten dugu eraikitzeko fitxategi bakarra interesatzen zaiguna - Eraiki.cs

Plugin-proiektu bat egiten dugu Revit/AutoCAD-en bertsio desberdinetarako konpilazioarekin

Ireki fitxategi hau eta idatzi script bat konfigurazio guztietarako proiektua eraikitzeko. Beno, edo erabili nire scripta, zure beharretara egokitzeko edita dezakezuna:

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 leihora itzuli eta komandoa idatziko dugu berriro nuke (komandoa idatz dezakezu nuke eskatutakoa adieraziz Target. Baina badugu bat Target, lehenespenez exekutatzen dena). Sartu tekla sakatu ondoren, benetako hackerrak bezala sentituko gara, izan ere, pelikula batean bezala, gure proiektua automatikoki muntatuko da konfigurazio ezberdinetarako.

Bide batez, PowerShell zuzenean erabil dezakezu Visual Studiotik (menua "IkusiΒ»->Β«Beste leiho batzukΒ»->Β«Pakete-kudeatzailearen kontsola"), baina dena zuri-beltzean egongo da, eta hori ez da oso erosoa.

Honek bukatzen du nire artikulua. Ziur nago zuk zeuk asmatu dezakezula AutoCAD-en aukera. Espero dut hemen aurkezten den materialak bere β€œbezeroak” aurkitzea.

Eskerrik asko zure arreta!

Iturria: www.habr.com

Gehitu iruzkin berria