Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

Nalika ngembangake plugin kanggo aplikasi CAD (ing kasusku iki AutoCAD, Revit lan Renga) liwat wektu, siji masalah katon - versi anyar saka program dirilis, owah-owahan API lan versi anyar saka plugins kudu digawe.

Yen sampeyan duwe mung siji plugin utawa sampeyan isih dadi pamula otodidak babagan iki, sampeyan mung bisa nggawe salinan proyek kasebut, ngganti papan sing dibutuhake lan ngumpulake versi anyar saka plugin kasebut. Patut, owah-owahan sakteruse kanggo kode bakal mbutuhake sawetara Tambah ing biaya pegawe.

Nalika sampeyan entuk pengalaman lan kawruh, sampeyan bakal nemokake sawetara cara kanggo ngotomatisasi proses iki. Aku mlaku dalan iki lan aku arep kanggo pitutur marang kowe apa aku rampung munggah karo lan carane trep iku.

Pisanan, ayo goleki cara sing jelas lan wis suwe saya gunakake.

Pranala menyang file proyek

Lan kanggo nggawe kabeh prasaja, visual lan dingerteni, aku bakal njlèntrèhaké kabeh nggunakake conto abstrak pembangunan plugin.

Ayo mbukak Visual Studio (Aku duwe versi Komunitas 2019. Lan ya - ing basa Rusia) lan nggawe solusi anyar. Ayo nelpon dheweke MySuperPluginForRevit

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

Kita bakal nggawe plugin kanggo Revit kanggo versi 2015-2020. Mulane, ayo nggawe proyek anyar ing solusi (Net Framework Class Library) lan nyebataken MySuperPluginForRevit_2015

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

Kita kudu nambah pranala menyang Revit API. Mesthi, kita bisa nambah pranala menyang file lokal (kita kudu nginstal kabeh SDKs perlu utawa kabeh versi Revit), nanging kita bakal langsung tindakake path tengen lan nyambung paket NuGet. Sampeyan bisa nemokake cukup sawetara paket, nanging aku bakal nggunakake dhewe.

Sawise nyambungake paket kasebut, klik-tengen ing item kasebut "referensi"lan pilih item"Pindhah packages.config menyang PackageReference...Β»

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

Yen dumadakan ing titik iki sampeyan mulai panik, amarga ing jendhela sifat paket ora bakal ana barang penting "Nyalin sacara lokal", sing mesthi kita kudu nyetel regane palsu, banjur aja gupuh - pindhah menyang folder karo project, mbukak file karo extension .csproj ing editor trep kanggo sampeyan (Aku nggunakake Notepad ++) lan golek entri babagan paket kita ana. Dheweke katon kaya iki saiki:

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

Tambah properti menyang runtime. Bakal dadi kaya iki:

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

Saiki, nalika mbangun proyek, file saka paket ora bakal disalin menyang folder output.
Ayo luwih maju - ayo langsung mbayangno plugin kita bakal nggunakake soko saka Revit API, sing wis diganti wektu nalika versi anyar wis dirilis. Inggih, utawa kita mung kudu ngganti soko ing kode gumantung versi Revit sing kita nggawe plugin. Kanggo mutusake masalah beda ing kode, kita bakal nggunakake simbol kompilasi kondisional. Bukak properti proyek, pindhah menyang tab "Majelis"lan ing lapangan"Notasi kompilasi kondisional"ayo nulis R2015.

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

Elinga yen simbol kudu ditambahake kanggo konfigurasi Debug lan Rilis.

Ya, nalika kita ana ing jendela properti, kita langsung menyang tab "Aplikasi"lan ing lapangan"Default namespaceΒ» mbusak sufiks _2015supaya spasi jeneng kita universal lan ora gumantung saka jeneng perakitan:

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

Ing kasusku, ing produk pungkasan, plugin kabeh versi dilebokake ing siji folder, mula jeneng perakitanku tetep nganggo suffix saka formulir kasebut. _20Ρ…Ρ…. Nanging sampeyan uga bisa mbusak seselan saka jeneng perakitan yen file mestine dumunung ing folder beda.

Ayo pindhah menyang kode file Kelas 1.cs lan simulasi sawetara kode ing kana, njupuk macem-macem versi 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;
        }
    }
}

Aku langsung njupuk kabeh versi Revit ndhuwur versi 2015 (sing kasedhiya ing wektu nulis) lan langsung njupuk menyang akun ngarsane simbol kompilasi kondisional, kang digawe nggunakake cithakan padha.

Ayo pindhah menyang sorotan utama. Kita nggawe proyek anyar ing solusi kita, mung kanggo versi plugin kanggo Revit 2016. Kita mbaleni kabeh langkah sing diterangake ing ndhuwur, masing-masing, ngganti nomer 2015 kanthi nomer 2016. Nanging file kasebut Kelas 1.cs dibusak saka proyek anyar.

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

File nganggo kode sing dibutuhake - Kelas 1.cs - kita wis duwe lan kita mung kudu nglebokake link menyang proyek anyar. Ana rong cara kanggo masang pranala:

  1. dawa - klik-tengen ing proyek banjur pilih "TambahΒ»->Β«Unsur sing ana", ing jendhela sing mbukak, temokake file sing dibutuhake lan tinimbang pilihan "Tambah"pilih option"Tambah minangka sambunganΒ»

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

  1. Cepet - langsung ing panuduh solusi, pilih file sing dikarepake (utawa malah file, utawa malah kabeh folder) lan seret menyang proyek anyar nalika terus tombol Alt. Nalika sampeyan nyeret, sampeyan bakal weruh yen sampeyan menet tombol Alt, kursor mouse bakal ngganti saka tandha plus kanggo panah.
    UPD: Aku nggawe kebingungan sethitik ing paragraf iki - kanggo nransfer sawetara file sampeyan kudu terus Shift + Alt!

Sawise nindakake prosedur kasebut, kita bakal duwe file ing proyek kapindho Kelas 1.cs kanthi lambang sing cocog (panah biru):

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

Nalika nyunting kode ing jendhela editor, sampeyan uga bisa milih konteks proyek kanggo nampilake kode kasebut, sing bakal ngidini sampeyan ndeleng kode sing diowahi miturut simbol kompilasi kondisional sing beda:

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

Kita nggawe kabeh proyek liyane (2017-2020) nggunakake skema iki. Life hack - yen sampeyan nyeret file ing Solution Explorer ora saka proyek dhasar, nanging saka proyek sing wis dilebokake minangka link, mula sampeyan ora kudu nahan tombol Alt!

Opsi sing diterangake cukup apik nganti wayahe nambahake versi anyar saka plugin utawa nganti wayahe nambah file anyar menyang proyek - kabeh iki dadi mboseni. Lan bubar aku tiba-tiba ngerti carane ngurutake kabeh karo siji proyek lan kita pindhah menyang cara liya

Piandel konfigurasi

Sawise maca ing kene, sampeyan bisa nguwuh, "Yagene sampeyan njlèntrèhaké cara pisanan, yen artikel kasebut langsung babagan sing kapindho?!" Lan aku nerangake kabeh supaya luwih jelas kenapa kita butuh simbol kompilasi bersyarat lan ing ngendi proyek kita beda-beda. Lan saiki dadi luwih jelas kanggo kita apa bedane ing proyek sing kudu ditindakake, mung ninggalake siji proyek.

Lan supaya kabeh luwih jelas, kita ora bakal nggawe proyek anyar, nanging bakal nggawe owah-owahan ing proyek saiki sing digawe kanthi cara sing sepisanan.

Dadi, pisanan, kita mbusak kabeh proyek saka solusi kajaba sing utama (ngemot file langsung). Sing. proyek kanggo versi 2016-2020. Bukak folder kanthi solusi lan busak folder proyek kasebut ing kana.

Kita duwe siji proyek sing isih ana ing keputusan kita - MySuperPluginForRevit_2015. Bukak properti lan:

  1. Ing tab β€œAplikasi"mbusak seselan saka jeneng rakitan _2015 (bakal jelas kok mengko)
  2. Ing tab β€œMajelisΒ» mbusak simbol kompilasi kondisional R2015 saka lapangan sing cocog

Cathetan: versi paling anyar saka Visual Studio duwe bug - simbol kompilasi kondisional ora ditampilake ing jendhela properti proyek, sanajan kasedhiya. Yen sampeyan nemu glitch iki, sampeyan kudu mbusak kanthi manual saka file .csproj. Nanging, kita isih kudu bisa, supaya maca ing.

Ganti jeneng proyek ing jendhela Solution Explorer kanthi mbusak suffix _2015 lan banjur mbusak project saka solusi. Iki perlu kanggo njaga ketertiban lan perasaan perfeksionis! Bukak folder solusi kita, ganti jeneng folder proyek ing kana kanthi cara sing padha lan muat proyek kasebut maneh menyang solusi kasebut.

Bukak manajer konfigurasi. konfigurasi US release ing asas, iku ora bakal perlu, supaya kita mbusak. Kita nggawe konfigurasi anyar kanthi jeneng sing wis kita kenal R2015, R2016, ..., R2020. Elinga yen sampeyan ora perlu nyalin setelan saka konfigurasi liyane lan sampeyan ora perlu nggawe konfigurasi proyek:

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

Pindhah menyang folder karo project lan mbukak file karo extension .csproj ing editor trep kanggo sampeyan. Miturut cara, sampeyan uga bisa mbukak ing Visual Studio - sampeyan kudu mbongkar proyek banjur item sing dikarepake bakal ana ing menu konteks:

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

Ngedit ing Visual Studio malah luwih disenengi, amarga editor loro aligns lan pituduh.

Ing file kita bakal weruh unsur PropertyGroup – ing paling ndhuwur iku umum, lan banjur nerangake kahanan. Unsur kasebut nyetel sifat proyek nalika dibangun. Unsur pisanan, sing tanpa kahanan, nyetel sifat umum, lan unsur kanthi kondisi, ngganti sawetara sifat gumantung konfigurasi.

Pindhah menyang unsur umum (pisanan). PropertyGroup lan katon ing properti Jeneng Majelis – iki jeneng perakitan lan kita kudu duwe tanpa suffix _2015. Yen ana seselan, banjur copot.

Nemokake unsur kanthi kondisi

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

Kita ora butuh - kita mbusak.

Unsur kanthi kondisi

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

bakal dibutuhake kanggo bisa ing tataran pangembangan kode lan debugging. Sampeyan bisa ngganti properti sing cocog karo kabutuhan - nyetel path output beda, ngganti simbol kompilasi kondisional, etc.

Saiki ayo nggawe unsur anyar PropertyGroup kanggo konfigurasi kita. Ing unsur kasebut, kita mung kudu nyetel papat properti:

  • OutputPath - folder output. Aku nyetel nilai gawan binR20xx
  • DefineConstants – simbol kompilasi kondisional. Nilai kudu ditemtokake TRACE; R20x
  • TargetFrameworkVersion - versi platform. Versi API Revit sing beda-beda mbutuhake platform sing beda kanggo ditemtokake.
  • Jeneng Majelis - jeneng perakitan (yaiku jeneng file). Sampeyan bisa nulis jeneng pas perakitan, nanging kanggo versatility Aku nyaranake nulis Nilai $(AssemblyName)_20Ρ…Ρ…. Kanggo nindakake iki, sadurunge mbusak suffix saka jeneng perakitan

Fitur sing paling penting saka kabeh unsur kasebut yaiku mung bisa disalin menyang proyek liyane tanpa ngganti kabeh. Mengko ing artikel aku bakal masang kabeh isi file .csproj.

Oke, kita wis ngerteni sifat proyek kasebut - ora angel. Nanging apa sing kudu dilakoni karo perpustakaan plug-in (paket NuGet). Yen kita katon luwih, kita bakal weruh sing perpustakaan klebu kasebut ing unsur ItemGroup. Nanging nasib ala - unsur iki salah ngolah kahanan minangka unsur PropertyGroup. Mbok menawa iki malah salah Visual Studio, nanging yen sampeyan nemtokake sawetara unsur ItemGroup karo kahanan konfigurasi, lan masang pranala beda menyang paket NuGet nang, banjur nalika sampeyan ngganti konfigurasi, kabeh paket kasebut disambungake menyang project.

Unsur kasebut mbantu kita Pilih, sing dianggo miturut logika kita biasanipun yen-banjur-liya.

Nggunakake unsur Pilih, kita nyetel paket NuGet beda kanggo konfigurasi beda:

Kabeh isi 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>

Wigati dimangerteni manawa ing salah sawijining kahanan aku nemtokake rong konfigurasi liwat UTAWA. Kanthi cara iki paket sing dibutuhake bakal disambungake sajrone konfigurasi Debug.

Lan ing kene kita duwe meh kabeh sampurna. Kita mbukak proyek maneh, ngaktifake konfigurasi sing dibutuhake, nelpon item kasebut "ing menu konteks solusi (dudu proyek)Mulihake kabeh paket NuGet"Lan kita ndeleng kepiye paket kita ganti.

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

Lan ing tataran iki aku teka ing buntu - kanggo ngumpulake kabeh konfigurasi bebarengan, kita bisa nggunakake kumpulan kumpulan (menu "MajelisΒ»->Β«Batch mbangun"), nanging nalika ngoper konfigurasi, paket ora dibalekake kanthi otomatis. Lan nalika ngumpulake proyek kasebut, iki uga ora kedadeyan, sanajan, ing teori, mesthine. Aku durung nemokake solusi kanggo masalah iki nggunakake cara standar. Lan paling kamungkinan iki uga bug Visual Studio.

Mulane, kanggo perakitan kumpulan, diputusake nggunakake sistem perakitan otomatis khusus Nuke. Aku pancene ora pengin iki amarga aku mikir iku overkill ing syarat-syarat pembangunan plugin, nanging ing wayahe aku ora weruh solusi liyane. Lan kanggo pitakonan "Kenapa Nuke?" Jawaban iki prasaja - kita nggunakake ing karya.

Dadi, pindhah menyang folder solusi kita (dudu proyek), tahan tombol kasebut shift lan klik-tengen ing ruang kosong ing folder - ing menu konteks pilih item "Bukak jendhela PowerShell ing kene".

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

Yen sampeyan durung nginstal nuke, banjur nulis prentah

dotnet tool install Nuke.GlobalTool –global

Saiki nulis printah nuke lan sampeyan bakal dijaluk ngatur nuke kanggo proyek saiki. Aku ora ngerti carane nulis iki luwih bener ing Rusia - ing Inggris bakal ditulis Ora bisa nemokake file .nuke. Apa sampeyan pengin nyiyapake mbangun? [y/n]

Pencet tombol Y banjur bakal ana item setelan langsung. We kudu pilihan paling gampang nggunakake MSBuild, supaya kita mangsuli kaya ing gambar:

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

Ayo menyang Visual Studio, sing bakal njaluk kita ngisi maneh solusi kasebut, amarga proyek anyar wis ditambahake. Kita ngisi maneh solusi lan ndeleng manawa kita duwe proyek mbangun ing ngendi kita kasengsem mung siji file - Build.cs

Kita nggawe siji proyek plugin kanthi kompilasi kanggo macem-macem versi Revit / AutoCAD

Bukak file iki lan tulis skrip kanggo mbangun proyek kanggo kabeh konfigurasi. Ya, utawa gunakake skripku, sing bisa diowahi supaya cocog karo kabutuhan sampeyan:

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

Kita bali menyang jendhela PowerShell lan nulis printah maneh nuke (sampeyan bisa nulis printah nuke nuduhake sing dibutuhake target. Nanging kita duwe siji target, sing mlaku kanthi gawan). Sawise mencet tombol Enter, kita bakal aran kaya peretas nyata, amarga, kaya ing film, proyek kita bakal dirakit kanthi otomatis kanggo konfigurasi sing beda-beda.

Miturut cara, sampeyan bisa nggunakake PowerShell langsung saka Visual Studio (menu "NdelengΒ»->Β«windows liyaneΒ»->Β«Konsol Manajer Paket"), nanging kabeh bakal ireng lan putih, sing ora trep banget.

Iki rampung artikelku. Aku yakin sampeyan bisa nemtokake pilihan kanggo AutoCAD dhewe. Muga-muga materi sing diwenehake ing kene bakal nemokake "klien".

Matur suwun!

Source: www.habr.com

Add a comment