Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

Wanneer inproppe vir CAD-toepassings ontwikkel word (in my geval dit is AutoCAD, Revit en Renga) met verloop van tyd, verskyn een probleem - nuwe weergawes van programme word vrygestel, hul API-veranderings en nuwe weergawes van plugins moet gemaak word.

Wanneer jy net een inprop het of jy is steeds 'n selfgeleerde beginner in hierdie besigheid, kan jy eenvoudig 'n kopie van die projek maak, die nodige plekke daarin verander en 'n nuwe weergawe van die inprop bou. Gevolglik sal daaropvolgende veranderinge aan die kode 'n veelvuldige toename in arbeidskoste meebring.

Soos jy ondervinding en kennis opdoen, sal jy verskeie maniere vind om hierdie proses te outomatiseer. Ek het hierdie kant toe gegaan en ek wil jou vertel waarmee ek geëindig het en hoe gerieflik dit is.

Kom ons kyk eers na 'n metode wat voor die hand liggend is en wat ek al lank gebruik het

Skakels na projeklêers

En om alles eenvoudig, duidelik en verstaanbaar te maak, sal ek alles beskryf deur 'n abstrakte voorbeeld van inpropontwikkeling te gebruik.

Kom ons maak Visual Studio oop (ek het die Community 2019-weergawe. En ja - in Russies) en skep 'n nuwe oplossing. Kom ons noem dit MySuperPluginForRevit

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

Ons sal 'n inprop vir Revit maak vir weergawes 2015-2020. Daarom sal ek 'n nuwe projek in die oplossing skep (Net Framework Class Library) en dit noem MySuperPluginForRevit_2015

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

Ons moet verwysings na die Revit API byvoeg. Natuurlik kan ons skakels by plaaslike lêers voeg (jy sal al die nodige SDK's of alle weergawes van Revit moet installeer), maar ons sal reguit voortgaan en die NuGet-pakket insluit. Jy kan 'n hele paar pakkette kry, maar ek sal my eie gebruik.

Nadat u die pakket gekoppel het, klik met die rechtermuisknop op die item "verwysings' en kies die menu-item 'Skuif packages.config na PackageReference...»

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

As jy skielik paniekerig raak by hierdie plek, aangesien daar geen belangrike item in die pakket eienskappe venster sal wees nie "plaaslik kopieer”, waarop ons beslis moet instel valse, moenie paniekerig raak nie - gaan na die projeklêer, maak die lêer met die .csproj-uitbreiding oop in 'n redigeerder wat vir jou gerieflik is (ek gebruik Notepad ++) en vind 'n inskrywing oor ons pakket daar. Sy lyk nou so:

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

Om 'n eiendom daarby te voeg looptyd. Dit sal so uitdraai:

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

Nou, wanneer 'n projek gebou word, sal die lêers van die pakket nie na die uitvoergids gekopieer word nie.
Kom ons gaan voort – verbeel jou net dat ons inprop iets van die Revit API sal gebruik, wat mettertyd verander het met die vrystelling van nuwe weergawes. Wel, of ons moet net iets van ons eie in die kode verander, afhangend van die weergawe van Revit waarvoor ons die inprop maak. Om sulke verskille in kode op te los, sal ons voorwaardelike samestellingsimbole gebruik. Maak die projek eienskappe oop, gaan na die blad "vergadering"en in die veld"Voorwaardelike samestellingsnotasie» skryf R2015.

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

Let daarop dat die simbool bygevoeg moet word vir beide die Debug-konfigurasie en die Release-konfigurasie.

Wel, terwyl ons in die eiendomsvenster is, gaan ons dadelik na die blad "Artikels"en in die veld"Verstek naamruimte»verwyder agtervoegsel _2015sodat ons naamruimte universeel en onafhanklik van die samestellingnaam is:

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

In my geval, in die finale produk, word plugins van alle weergawes by een vouer gevoeg, so my samestellingsname bly met die agtervoegsel van die vorm _20xx. Maar jy kan ook die agtervoegsel van die samestellingnaam verwyder as jy verwag dat die lêers in verskillende dopgehou sal wees.

Kom ons gaan na die kode van die lêer Klas1.cs en simuleer 'n paar kode daar, met inagneming van verskillende weergawes van 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;
        }
    }
}

Ek het dadelik alle weergawes van Revit bokant die 2015-weergawe (wat ten tyde van die skryf van die artikel was) in ag geneem en onmiddellik die teenwoordigheid van voorwaardelike samestellingsimbole wat ek volgens dieselfde sjabloon skep, in ag geneem.

Kom ons gaan aan na die hoofhoogtepunt. Ons skep 'n nuwe projek in ons oplossing, slegs vir die inpropweergawe onder Revit 2016. Ons herhaal al die stappe wat hierbo beskryf is, onderskeidelik, en vervang die nommer 2015 met die nommer 2016. Maar die lêer Klas1.cs van die nuwe projek verwyder.

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

Lêer met die vereiste kode - Klas1.cs - ons het reeds en ons moet net 'n skakel daarna in 'n nuwe projek invoeg. Daar is twee maniere om skakels in te voeg:

  1. Lank - klik op die projek met die regter muisknoppie, kies die item "Voeg»->«Bestaande element", in die venster wat oopmaak, vind die gewenste lêer en in plaas van die opsie"Voeg» kies opsie «Voeg by as skakel»

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

  1. kort - direk in die oplossingverkenner, kies die verlangde lêer (of selfs lêers. Of selfs hele dopgehou) en sleep dit na 'n nuwe projek terwyl jy die Alt-sleutel inhou. Wanneer jy sleep, sal jy sien dat wanneer jy die Alt-sleutel druk, die wyser op die muis van 'n plusteken na 'n pyl sal verander.
    UPS: Ek het 'n bietjie verwarring in hierdie paragraaf gemaak - om verskeie lêers oor te dra, moet jy klem Shift + Alt!

Na die prosedure sal ons 'n lêer in die tweede projek hê Klas1.cs met die ooreenstemmende ikoon (blou pyltjie):

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

Wanneer jy kode in die redigeervenster wysig, kan jy ook kies in die konteks van watter projek om die kode te vertoon, wat jou sal toelaat om te sien hoe die kode geredigeer word met verskillende voorwaardelike samestellingsimbole:

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

Volgens hierdie skema skep ons alle ander projekte (2017-2020). Life hack - as jy lêers in die oplossing verkenner sleep nie van die basisprojek nie, maar van die projek waar hulle reeds as 'n skakel ingevoeg is, dan kan jy nie die Alt-sleutel inhou nie!

Die beskryf opsie is redelik goed totdat 'n nuwe weergawe van die inprop bygevoeg word of totdat nuwe lêers by die projek gevoeg word - dit alles word baie somber. En onlangs het ek skielik besef hoe om dit alles met een projek uit te sorteer en ons beweeg aan na die tweede metode.

Konfigurasie Magic

Nadat jy hier gelees het, kan jy uitroep: "Wat de hel het jy die eerste metode beskryf, as die artikel dadelik oor die tweede een handel ?!". En ek het alles beskryf om dit duideliker te maak hoekom ons voorwaardelike samestellingsimbole nodig het en op watter plekke ons projekte verskil. En nou word dit vir ons duideliker watter soort projekverskille ons moet implementeer, wat net een projek oorbly.

En om alles duideliker te maak, sal ons nie 'n nuwe projek skep nie, maar ons sal veranderinge aanbring aan ons huidige projek wat op die eerste manier geskep is.

Dus, eerstens, verwyder ons alle projekte uit die oplossing, behalwe die hoof een (wat die lêers direk bevat). Dié. projekte vir weergawes 2016-2020. Maak die vouer met die oplossing oop en vee die vouers van hierdie projekte daar uit.

Ons het een projek oor in die oplossing - MySuperPluginForRevit_2015. Maak sy eienskappe oop en:

  1. Op die blad "Artikels» verwyder die agtervoegsel van die samestellingnaam _2015 (dit sal later duidelik word hoekom)
  2. Op die blad "vergadering»verwyder die voorwaardelike samestellingsimbool R2015 uit die ooreenstemmende veld

Let wel: Daar is 'n fout in die nuutste weergawe van Visual Studio - voorwaardelike samestelling simbole word nie in die projek eienskappe venster vertoon nie, alhoewel hulle beskikbaar is. As jy hierdie fout het, moet jy dit handmatig uit die .csproj-lêer verwyder. Ons moet egter nog daarin werk, so lees verder.

Hernoem die projek in die Solution Explorer-venster deur die agtervoegsel te verwyder _2015 en verwyder dan die projek uit die oplossing. Dit is nodig om orde en gevoelens van perfeksioniste te handhaaf! Maak die gids van ons oplossing oop, hernoem die projeklêer op dieselfde manier en laai die projek terug in die oplossing.

Maak die konfigurasiebestuurder oop. Amerikaanse konfigurasie Release in beginsel sal dit nie nodig wees nie, daarom vee ons dit uit. Ons skep nuwe konfigurasies met name wat reeds aan ons bekend is R2015, R2016, ..., R2020. Let daarop dat jy nie instellings van ander konfigurasies hoef te kopieer nie en jy hoef nie projekkonfigurasies te skep nie:

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

Ons gaan na die gids met die projek en maak die lêer met die .csproj-uitbreiding oop in 'n redigeerder wat vir jou gerieflik is. Terloops, u kan dit ook in Visual Studio oopmaak - u moet die projek aflaai en dan sal die regte item in die kontekskieslys wees:

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

Redigering in Visual Studio is selfs verkieslik, aangesien die redigeerder beide belyn en vra.

In die lêer sal ons die elemente sien Eiendomsgroep - heel bo is die generaal, en kom dan met die voorwaardes. Hierdie elemente bepaal die eienskappe van die projek wanneer dit gebou word. Die eerste element, wat sonder voorwaardes is, stel algemene eienskappe, en elemente met voorwaardes, onderskeidelik, verander sommige eienskappe na gelang van konfigurasies.

Gaan na die algemene (eerste) element Eiendomsgroep en kyk na die eiendom Vergadering Naam - dit is die naam van die gemeente en ons moet dit sonder 'n agtervoegsel hê _2015. As daar 'n agtervoegsel is, verwyder dit dan.

Vind 'n element met 'n voorwaarde

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

Ons het dit nie nodig nie – ons vee dit uit.

Element met 'n toestand

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

sal nodig wees om by die ontwikkelingstadium te werk en die kode te ontfout. U kan die eienskappe daarvan verander om by u behoeftes te pas - stel verskillende uitvoerpaaie, verander voorwaardelike samestellingsimbole, ens.

Nou skep ons nuwe elemente Eiendomsgroep vir ons konfigurasies. In hierdie elemente moet ons net vier eienskappe stel:

  • Uitsetpad - uitvoergids. Ek stel verstekwaarde binR20xx
  • Definieer konstante is voorwaardelike samestellingsimbole. Moet ingestel word op TRACE;R20xx
  • TargetFramework Weergawe - platform weergawe. Verskillende weergawes van die Revit API vereis dat verskillende platforms ingestel moet word.
  • Vergadering Naam – samestelling naam (d.w.s. lêernaam). U kan die gewenste samestellingnaam direk skryf, maar vir universaliteit raai ek u aan om die waarde te skryf $(AssemblyName)_20xx. Om dit te doen, het ons voorheen die agtervoegsel van die samestellingnaam verwyder

Die belangrikste kenmerk van al hierdie elemente is dat hulle eenvoudig na ander projekte gekopieer kan word sonder om enigsins te verander. Later in die artikel sal ek die hele inhoud van die .csproj-lêer aanheg.

Wel, ons het die eienskappe van die projek uitgepluis - dit is nie moeilik nie. Maar wat om te doen met die ingeslote biblioteke (NuGet-pakkette). As ons verder kyk, sal ons sien dat die ingeslote biblioteke deur die elemente gespesifiseer word Itemgroep. Maar hier is die probleem - hierdie element verwerk toestande verkeerd, as 'n element Eiendomsgroep. Miskien is dit selfs 'n Visual Studio-fout, maar as jy verskeie elemente instel Itemgroep met konfigurasievoorwaardes, en voeg verskillende skakels na NuGet-pakkette binne, en wanneer die konfigurasie verander word, word alle gespesifiseerde pakkette aan die projek gekoppel.

'n Element kom ons te hulp Kies, wat werk volgens die logika wat aan ons bekend is as-dan-anders.

Gebruik element Kies, stel verskillende NuGet-pakkette vir verskillende konfigurasies in:

Alle inhoud van 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>

Neem asseblief kennis dat ek in een van die toestande twee konfigurasies gespesifiseer het via OF. Die vereiste pakket sal dus tydens konfigurasie gekoppel word Ontfout.

En hier is ons amper perfek. Ons laai die projek terug, skakel die konfigurasie aan wat ons benodig, noem die item "Herstel alle NuGet-pakkette” en kyk hoe ons pakkette verander.

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

En op hierdie stadium het ek by 'n doodloopstraat gekom - om al die konfigurasies gelyktydig te versamel, kon ons die bondelsamestelling gebruik (menu "vergadering»->«Batch samestelling”), maar wanneer konfigurasies verander word, word pakkette nie outomaties herstel nie. En wanneer die projek saamgestel word, gebeur dit ook nie, alhoewel dit in teorie behoort. Ek het nie 'n oplossing vir hierdie probleem op standaard manier gevind nie. En dit is waarskynlik ook 'n Visual Studio-fout.

Daarom is daar vir bondelsamestelling besluit om 'n spesiale outomatiese monteerstelsel te gebruik Nuke. Ek wou dit nie regtig hê nie, want ek dink dit is oordrewe in terme van plugin-ontwikkeling, maar op die oomblik sien ek geen ander oplossing nie. En op die vraag "Hoekom Nuke?" Die antwoord is eenvoudig – ons gebruik dit by die werk.

So, gaan na die gids van ons oplossing (nie die projek nie), hou die sleutel in Skuif en regskliek op 'n leë spasie in die gids - in die konteks kieslys, kies die item "Maak PowerShell-venster hier oop".

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

As jy nie geïnstalleer het nie nuke, skryf dan eers die opdrag

dotnet tool install Nuke.GlobalTool –global

Skryf nou 'n opdrag nuke en jy sal gevra word om te konfigureer nuke vir die huidige projek. Ek weet nie hoe om dit korrek in Russies te skryf nie - in Engels sal dit geskryf word. Kon nie .nuke-lêer vind nie. Wil jy 'n bouwerk opstel? [j/n]

Druk die Y-sleutel en dan sal daar direkte instellings wees. Ons wil die eenvoudigste opsie gebruik MSBuild, so ons antwoord soos in die skermkiekie:

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

Kom ons gaan na Visual Studio, wat ons sal vra om die oplossing te herlaai, aangesien 'n nuwe projek daarby gevoeg is. Herlaai die oplossing en sien dat ons 'n projek het bou waarin ons net in een lêer belangstel - Bou.cs

Ons maak een inpropprojek met samestelling vir verskillende weergawes van Revit / AutoCAD

Ons maak hierdie lêer oop en skryf 'n script om die projek vir alle konfigurasies te bou. Wel, of gebruik my script, wat jy self kan redigeer:

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

Ons keer terug na die PowerShell-venster en skryf die opdrag weer nuke (jy kan die opdrag skryf nuke wat die vereiste aandui Doel. Maar ons het een Doelwat by verstek begin). Nadat ons die Enter-sleutel gedruk het, sal ons soos regte hackers voel, want, soos in 'n fliek, sal ons projek outomaties saamgestel word vir verskillende konfigurasies.

Terloops, jy kan PowerShell direk vanaf Visual Studio gebruik (kieslys "View»->«Ander vensters»->«Pakketbestuurderkonsole”), maar alles sal swart en wit wees, wat nie baie gerieflik is nie.

Dit sluit my artikel af. Ek is seker dat u self die opsie vir AutoCAD kan uitvind. Ek hoop dat die materiaal wat hier aangebied word, sy "kliënte" sal vind.

Skep 'n nuwe weergawe!

Bron: will.com

Voeg 'n opmerking