Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Kun kehitetään laajennuksia CAD-sovelluksiin (minun tapauksessani nämä ovat AutoCAD, Revit ja Renga) ajan myötä ilmaantuu yksi ongelma - ohjelmista julkaistaan ​​uusia versioita, niiden API-muutokset ja uudet versiot laajennuksista on tehtävä.

Kun sinulla on vain yksi laajennus tai olet vielä itseoppinut aloittelija tässä asiassa, voit yksinkertaisesti kopioida projektin, muuttaa sen tarvittavia paikkoja ja koota laajennuksen uuden version. Näin ollen koodiin myöhemmin tehtävät muutokset aiheuttavat työvoimakustannusten moninkertaisen nousun.

Kun saat kokemusta ja tietoa, löydät useita tapoja automatisoida tämä prosessi. Kävelin tätä polkua ja haluan kertoa teille, mihin päädyin ja kuinka kätevää se on.

Ensin tarkastellaan menetelmää, joka on ilmeinen ja jota olen käyttänyt pitkään.

Linkit projektitiedostoihin

Ja tehdäkseni kaikesta yksinkertaista, visuaalista ja ymmärrettävää, kuvailen kaiken käyttämällä abstraktia esimerkkiä laajennuskehityksestä.

Avataan Visual Studio (minulla on Community 2019 -versio. Ja kyllä ​​- venäjäksi) ja luodaan uusi ratkaisu. Soitetaan hänelle MySuperPluginForRevit

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Teemme Revitille laajennuksen versioille 2015-2020. Siksi luodaan ratkaisuun uusi projekti (Net Framework Class Library) ja kutsutaan se MySuperPluginForRevit_2015

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Meidän on lisättävä linkkejä Revit API:hen. Tietysti voimme lisätä linkkejä paikallisiin tiedostoihin (meidän on asennettava kaikki tarvittavat SDK:t tai kaikki Revit-versiot), mutta seuraamme välittömästi oikeaa polkua ja yhdistämme NuGet-paketin. Löytyy aika monta pakettia, mutta käytän omiani.

Kun olet yhdistänyt paketin, napsauta hiiren kakkospainikkeella kohdetta "viittaukset"ja valitse kohde"Siirrä packages.config tiedostoon PackageReference...»

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Jos yhtäkkiä tässä vaiheessa alat paniikkiin, koska paketin ominaisuudet -ikkunassa ei ole tärkeää kohdetta "Kopioi paikallisesti", joka meidän on ehdottomasti asetettava arvoon väärä, älä panikoi - mene projektin kansioon, avaa tiedosto .csproj-tunnisteella sinulle sopivassa editorissa (käytän Notepad++:a) ja etsi sieltä merkintä paketistamme. Hän näyttää nyt tältä:

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

Lisää siihen omaisuus suoritusaika. Siitä tulee näin:

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

Nyt projektia rakennettaessa paketin tiedostoja ei kopioida tuloskansioon.
Mennään pidemmälle - kuvitellaan heti, että laajennuksemme käyttää jotain Revit API:sta, joka on muuttunut ajan myötä, kun uusia versioita on julkaistu. No, tai meidän on vain muutettava jotain koodissa sen Revit-version mukaan, jolle laajennuksen teemme. Tällaisten koodierojen ratkaisemiseksi käytämme ehdollisia käännössymboleja. Avaa projektin ominaisuudet, siirry välilehdellekokoonpano"ja pellolla"Ehdollinen käännösmerkintä"kirjoitetaan R2015.

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Huomaa, että symboli on lisättävä sekä Debug- että Release-kokoonpanoihin.

No, kun olemme ominaisuusikkunassa, siirrymme välittömästi "-välilehteenSovellus"ja pellolla"Oletusnimiavaruus» poista pääte _2015niin, että nimiavaruutemme on universaali ja riippumaton kokoonpanon nimestä:

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Minun tapauksessani lopputuotteessa kaikkien versioiden laajennukset laitetaan yhteen kansioon, joten kokoonpanoni nimet pysyvät lomakkeen päätteellä _20хх. Mutta voit myös poistaa päätteen kokoonpanon nimestä, jos tiedostojen oletetaan olevan eri kansioissa.

Siirrytään tiedostokoodiin Luokka1.cs ja simuloi siellä jotain koodia ottaen huomioon Revitin eri versiot:

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

Otin heti huomioon kaikki Revitin version 2015 yläpuolella olevat versiot (jotka olivat saatavilla kirjoitushetkellä) ja otin välittömästi huomioon ehdollisten käännössymbolien olemassaolon, jotka luodaan samalla mallilla.

Jatketaan tärkeimpään kohokohtaan. Luomme ratkaisussamme uuden projektin vain Revit 2016:n laajennuksen versiolle. Toistamme kaikki yllä kuvatut vaiheet, vastaavasti korvaamalla numeron 2015 numerolla 2016. Mutta tiedosto Luokka1.cs poistaa uudesta projektista.

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Tiedosto vaaditulla koodilla - Luokka1.cs – meillä on se jo, ja meidän tarvitsee vain lisätä linkki siihen uuteen projektiin. On kaksi tapaa lisätä linkkejä:

  1. Pitkä – napsauta projektia hiiren kakkospainikkeella ja valitse "Lisätä»->«Olemassa oleva elementti", etsi avautuvasta ikkunasta haluamasi tiedosto ja vaihtoehdon sijaan "Lisätä"valitse vaihtoehto"Lisää yhteydeksi»

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

  1. lyhyt – valitse suoraan ratkaisunhallinnassa haluamasi tiedosto (tai jopa tiedostot tai jopa kokonaiset kansiot) ja vedä se uuteen projektiin samalla, kun pidät Alt-näppäintä painettuna. Kun vedät, näet, että kun painat Alt-näppäintä, hiiren osoitin muuttuu plusmerkistä nuoleksi.
    UPD: Tein hieman sekaannusta tähän kappaleeseen - jos haluat siirtää useita tiedostoja, sinun tulee pitää painettuna Vaihto + Alt!

Toimenpiteen suorittamisen jälkeen meillä on tiedosto toisessa projektissa Luokka1.cs vastaavalla kuvakkeella (sininen nuoli):

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Kun muokkaat koodia editoriikkunassa, voit myös valita, missä projektikontekstissa koodi näytetään, jolloin näet muokattavan koodin eri ehdollisten käännössymbolien alla:

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Luomme kaikki muut projektit (2017-2020) tällä mallilla. Life hack - jos vedät tiedostoja Solution Explorerissa et perusprojektista, vaan projektista, johon ne on jo lisätty linkkinä, sinun ei tarvitse pitää Alt-näppäintä painettuna!

Kuvattu vaihtoehto on melko hyvä siihen hetkeen asti, kun lisätään uusi versio laajennuksesta tai siihen asti, kun uusia tiedostoja lisätään projektiin - kaikki tämä tulee erittäin tylsäksi. Ja äskettäin yhtäkkiä yhtäkkiä tajusin kuinka selvittää kaikki yhdellä projektilla, ja siirrymme toiseen menetelmään

Kokoonpanojen taika

Kun olet lukenut tämän, voit huudahtaa: "Miksi kuvailit ensimmäistä menetelmää, jos artikkeli koskee välittömästi toista?!" Ja kuvailin kaiken selventääkseni, miksi tarvitsemme ehdollisia kokoamissymboleja ja missä paikoissa projektimme eroavat toisistaan. Ja nyt meille tulee selvemmäksi, mitä eroja projekteissa meidän tulee toteuttaa, ja jäljelle jää vain yksi projekti.

Ja jotta kaikki olisi selvempää, emme luo uutta projektia, vaan teemme muutoksia nykyiseen, ensimmäisellä tavalla luotuun projektiimme.

Joten ensinnäkin poistamme ratkaisusta kaikki projektit paitsi pääprojektin (joka sisältää tiedostot suoraan). Nuo. projekteja versioille 2016-2020. Avaa ratkaisun sisältävä kansio ja poista sieltä näiden projektien kansiot.

Meillä on yksi projekti jäljellä päätöksessämme - MySuperPluginForRevit_2015. Avaa sen ominaisuudet ja:

  1. Välilehdellä "Sovellus"poista pääte kokoonpanon nimestä _2015 (Myöhemmin selviää miksi)
  2. Välilehdellä "kokoonpano» poista ehdollisen kokoamisen symboli R2015 vastaavasta kentästä

Huomautus: Visual Studion uusimmassa versiossa on virhe – ehdolliset käännössymbolit eivät näy projektin ominaisuusikkunassa, vaikka ne ovat saatavilla. Jos kohtaat tämän häiriön, sinun on poistettava ne manuaalisesti .csproj-tiedostosta. Meidän on kuitenkin vielä työstettävä sitä, joten lue eteenpäin.

Nimeä projekti uudelleen Solution Explorer -ikkunassa poistamalla pääte _2015 ja poista sitten projekti ratkaisusta. Tämä on välttämätöntä järjestyksen ja perfektionistien tunteiden ylläpitämiseksi! Avaamme ratkaisumme kansion, nimeämme siellä olevan projektikansion samalla tavalla uudelleen ja lataamme projektin takaisin ratkaisuun.

Avaa asetusten hallinta. Yhdysvaltain kokoonpano Vapauta periaatteessa sitä ei tarvita, joten poistamme sen. Luomme uusia kokoonpanoja meille jo tutuilla nimillä R2015, R2016, ..., R2020. Huomaa, että sinun ei tarvitse kopioida asetuksia muista kokoonpanoista eikä sinun tarvitse luoda projektimäärityksiä:

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Siirry kansioon, jossa projekti on ja avaa tiedosto .csproj-tunnisteella sinulle sopivassa editorissa. Muuten, voit avata sen myös Visual Studiossa - sinun on purettava projekti ja sitten haluttu kohde on kontekstivalikossa:

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Editointi Visual Studiossa on jopa parempi, koska editori sekä tasaa että kehottaa.

Tiedostossa näemme elementit PropertyGroup – Ylhäällä on yleinen, ja sitten tulevat ehdot. Nämä elementit määrittävät projektin ominaisuudet, kun se rakennetaan. Ensimmäinen elementti, joka on ilman ehtoja, asettaa yleiset ominaisuudet, ja elementit ehdoineen muuttavat joitain ominaisuuksia riippuen kokoonpanoista.

Siirry yhteiseen (ensimmäiseen) elementtiin PropertyGroup ja katsoa omaisuutta AssemblyName – tämä on kokoonpanon nimi ja se pitäisi olla ilman päätettä _2015. Jos siinä on jälkiliite, poista se.

Ehdon sisältävän elementin löytäminen

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

Emme tarvitse sitä - poistamme sen.

Elementti kunnossa

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

tarvitaan toimimaan koodin kehittämis- ja virheenkorjausvaiheessa. Voit muuttaa sen ominaisuuksia tarpeidesi mukaan - asettaa erilaisia ​​tulostuspolkuja, muuttaa ehdollisia käännössymboleita jne.

Nyt luodaan uusia elementtejä PropertyGroup kokoonpanoillemme. Näissä elementeissä meidän tarvitsee vain asettaa neljä ominaisuutta:

  • OutputPath - ulostulokansio. Asetin oletusarvon binR20xx
  • DefineConstants – ehdollisen kokoamisen symbolit. Arvo tulee määrittää TRACE;R20хх
  • TargetFrameworkVersion – alustaversio. Revit API:n eri versiot edellyttävät eri alustojen määrittämistä.
  • AssemblyName – kokoonpanon nimi (eli tiedoston nimi). Voit kirjoittaa kokoonpanon tarkan nimen, mutta monipuolisuuden vuoksi suosittelen arvon kirjoittamista $(AssemblyName)_20хх. Tätä varten olemme aiemmin poistaneet päätteen kokoonpanon nimestä

Kaikkien näiden elementtien tärkein ominaisuus on, että ne voidaan yksinkertaisesti kopioida muihin projekteihin muuttamatta niitä ollenkaan. Myöhemmin artikkelissa liitän koko .csproj-tiedoston sisällön.

Okei, olemme selvittäneet projektin ominaisuudet - se ei ole vaikeaa. Mutta mitä tehdä laajennuskirjastoille (NuGet-paketit). Jos katsomme pidemmälle, näemme, että mukana olevat kirjastot on määritelty elementeissä Tuoteryhmä. Mutta huonoa onnea - tämä elementti käsittelee olosuhteet väärin elementtinä PropertyGroup. Ehkä tämä on jopa Visual Studion häiriö, mutta jos määrität useita elementtejä Tuoteryhmä konfigurointiehdoilla ja lisää erilaisia ​​linkkejä NuGet-paketteihin, niin kun muutat määritystä, kaikki määritetyt paketit yhdistetään projektiin.

Elementti tulee avuksemme Valita, joka toimii tavallisen logiikkamme mukaisesti jos-sitten-muu.

Elementin käyttö Valita, asetamme erilaisia ​​NuGet-paketteja eri kokoonpanoille:

Kaikki sisältö 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>

Huomaa, että yhdessä ehdoista määritin kaksi kokoonpanoa kautta TAI. Näin tarvittava paketti yhdistetään konfiguroinnin aikana Debug.

Ja täällä meillä on melkein kaikki täydellistä. Lataamme projektin takaisin, otamme käyttöön tarvitsemamme kokoonpanon, kutsumme ratkaisun (ei projektin) pikavalikon kohtaa "Palauta kaikki NuGet-paketit"ja näemme kuinka pakettimme muuttuvat.

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Ja tässä vaiheessa tulin umpikujaan - kaikkien kokoonpanojen keräämiseksi kerralla voisimme käyttää eräkokoonpanoa (valikko "kokoonpano»->«Erärakenne"), mutta kokoonpanoja vaihdettaessa paketteja ei palauteta automaattisesti. Ja projektia koottaessa tätä ei myöskään tapahdu, vaikka teoriassa sen pitäisi. En ole löytänyt ratkaisua tähän ongelmaan tavallisilla keinoilla. Ja todennäköisesti tämä on myös Visual Studio -vika.

Siksi eräkokoonpanossa päätettiin käyttää erityistä automatisoitua kokoonpanojärjestelmää ydinase. En itse asiassa halunnut tätä, koska se on mielestäni ylivoimaista laajennuskehityksen kannalta, mutta tällä hetkellä en näe muuta ratkaisua. Ja kysymykseen "Miksi Nuke?" Vastaus on yksinkertainen - käytämme sitä töissä.

Joten mene ratkaisumme kansioon (ei projektiin), pidä näppäintä painettuna siirtyminen ja napsauta hiiren kakkospainikkeella tyhjää kohtaa kansiossa - valitse pikavalikosta kohta "Avaa PowerShell-ikkuna tästä'.

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Jos sinulla ei ole sitä asennettuna ydinase, kirjoita sitten ensin komento

dotnet tool install Nuke.GlobalTool –global

Kirjoita nyt komento ydinase ja sinua kehotetaan määrittämään ydinase nykyiselle projektille. En tiedä kuinka kirjoittaa tämä oikein venäjäksi - englanniksi se kirjoitetaan Ei löytynyt .nuke-tiedostoa. Haluatko perustaa rakennuksen? [y/n]

Paina Y-näppäintä ja sitten tulee suoria asetuskohteita. Tarvitsemme yksinkertaisimman vaihtoehdon MSBuild, joten vastaamme kuten kuvakaappauksessa:

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Siirrytään Visual Studioon, joka kehottaa meitä lataamaan ratkaisun uudelleen, koska siihen on lisätty uusi projekti. Lataamme ratkaisun uudelleen ja näemme, että meillä on projekti rakentaa jossa olemme kiinnostuneita vain yhdestä tiedostosta - Build.cs

Teemme yhden laajennusprojektin käännöksellä Revit/AutoCADin eri versioille

Avaa tämä tiedosto ja kirjoita komentosarja projektin rakentamiseksi kaikille kokoonpanoille. No, tai käytä käsikirjoitustani, jota voit muokata tarpeidesi mukaan:

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

Palaamme PowerShell-ikkunaan ja kirjoitamme komennon uudelleen ydinase (voit kirjoittaa komennon ydinase ilmoittamalla vaaditun Kohde. Mutta meillä on yksi Kohde, joka toimii oletuksena). Enter-näppäimen painamisen jälkeen tunnemme itsemme oikeiksi hakkereiksi, koska kuten elokuvassa, projektimme kootaan automaattisesti eri kokoonpanoille.

Muuten voit käyttää PowerShellia suoraan Visual Studiosta (valikko "Katsella»->«Muut ikkunat»->«Paketinhallintakonsoli"), mutta kaikki on mustavalkoista, mikä ei ole kovin kätevää.

Tämä päättää artikkelini. Olen varma, että voit selvittää AutoCAD-vaihtoehdon itse. Toivon, että tässä esitetty materiaali löytää "asiakkaansa".

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

Lähde: will.com

Lisää kommentti