Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

Nalika ngembangkeun plugins pikeun aplikasi CAD (bisi kuring ieu AutoCAD, Revit na Renga) kana waktu, hiji masalah muncul - versi anyar program dileupaskeun, parobahan API maranéhanana sarta versi anyar tina plugins kudu dijieun.

Lamun anjeun boga ngan hiji plugin atawa anjeun masih mangrupa pemula timer diajarkeun dina urusan ieu, anjeun ngan saukur bisa nyieun salinan proyék nu, ngarobah tempat diperlukeun dina eta jeung ngumpul versi anyar tina plugin nu. Sasuai, parobahan saterusna kana kode bakal merlukeun sababaraha kanaékan biaya tanaga gawé.

Nalika anjeun nampi pangalaman sareng pangaweruh, anjeun bakal mendakan sababaraha cara pikeun ngajadikeun otomatis prosés ieu. Kuring leumpang jalur ieu sareng abdi hoyong nyarioskeun ka anjeun naon anu kuring réngsé sareng kumaha merenah éta.

Mimiti, hayu urang tingali metode anu atra sareng anu parantos lami dianggo.

Tumbu ka file proyék

Sarta sangkan sagalana basajan, visual jeung kaharti, abdi bakal ngajelaskeun sagalana ngagunakeun conto abstrak ngembangkeun plugin.

Hayu urang muka Visual Studio (Kuring boga versi Komunitas 2019. Jeung enya - dina Rusia) jeung nyieun solusi anyar. Hayu urang nelepon anjeunna MySuperPluginForRevit

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

Kami bakal ngadamel plugin pikeun Revit pikeun vérsi 2015-2020. Ku alatan éta, hayu urang nyieun hiji proyék anyar dina solusi (Net Framework Kelas Perpustakaan) jeung nelepon deui MySuperPluginForRevit_2015

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

Urang kedah nambihan tautan kana API Revit. Tangtosna, urang tiasa nambihan tautan kana file lokal (urang kedah masang sadaya SDK anu diperyogikeun atanapi sadaya versi Revit), tapi urang bakal langsung nuturkeun jalan anu leres sareng sambungkeun pakét NuGet. Anjeun tiasa manggihan rada sababaraha bungkusan, tapi kuring bakal make sorangan.

Saatos nyambungkeun pakét, klik katuhu dina itemna "rujukan"jeung pilih item"Pindahkeun packages.config ka PackageReference...»

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

Upami ujug-ujug dina titik ieu anjeun mimiti panik, sabab dina jandela sipat pakét moal aya barang anu penting "Nyalin sacara lokal", anu pasti urang kedah disetel ka nilai palsu, teras entong panik - lebet kana polder sareng proyék, buka file nganggo ekstensi .csproj dina editor anu cocog pikeun anjeun (Kuring nganggo Notepad ++) sareng mendakan éntri ngeunaan pakét kami di dinya. Manehna kasampak kawas kieu ayeuna:

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

Tambahkeun sipat pikeun eta runtime. Éta bakal katingali sapertos kieu:

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

Ayeuna, nalika ngawangun proyék, file tina pakét moal disalin kana polder kaluaran.
Hayu urang langkung jauh - hayu urang langsung bayangkeun yén plugin urang bakal ngagunakeun hiji hal tina API Revit, anu parantos robih kana waktosna nalika versi énggal parantos dileupaskeun. Nya, atanapi urang ngan ukur kedah ngarobih hiji hal dina kode gumantung kana versi Revit anu urang damel plugin. Pikeun ngabéréskeun bédana sapertos dina kode, kami bakal nganggo simbol kompilasi kondisional. Buka sipat proyék, angkat ka tab "Majelis"jeung di sawah"Notasi kompilasi kondisional"hayu urang nulis R2015.

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

Catet yén simbolna kedah ditambihan pikeun konfigurasi Debug sareng Release.

Nya, nalika urang aya dina jandela sipat, urang langsung angkat ka tab "aplikasi"jeung di sawah"Ruang ngaran standar» hapus sufiks _2015ku kituna namespace urang universal tur bebas tina ngaran assembly:

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

Dina kasus kuring, dina produk ahir, plugins sadaya vérsi disimpen dina hiji polder, janten nami rakitan kuring tetep sareng sufiks bentuk. _20хх. Tapi anjeun ogé tiasa nyabut sufiks tina nami rakitan upami file-file éta sakuduna aya dina polder anu béda.

Hayu urang buka kode file Kelas1.cs sareng simulate sababaraha kode di dinya, nyandak vérsi Revit anu béda:

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

Kuring langsung tumut kana akun sadaya vérsi Revit di luhur vérsi 2015 (anu sayogi dina waktos nyerat) sareng langsung tumut kana ayana simbol kompilasi kondisional, anu didamel nganggo témplat anu sami.

Hayu urang ngaléngkah ka sorotan utama. Urang nyieun hiji proyék anyar dina leyuran urang, ngan pikeun versi plugin pikeun Revit 2016. Urang ngulang sagala léngkah ditétélakeun di luhur, masing-masing, ngaganti nomer 2015 jeung nomer 2016. Tapi file Kelas1.cs ngahapus tina proyék anyar.

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

File sareng kode anu diperyogikeun - Kelas1.cs – urang geus boga eta jeung urang ngan perlu nyelapkeun link ka eta dina proyék anyar. Aya dua cara pikeun nyelapkeun tautan:

  1. Panjang - klik katuhu dina proyék tur pilih "nambah»->«Unsur anu aya", dina jandela anu muka, panggihan file anu diperyogikeun sareng tinimbang pilihan "nambah"pilih pilihan"Tambahkeun salaku sambungan»

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

  1. pendek - langsung dina solusi explorer, pilih file anu dipikahoyong (atanapi file, atanapi bahkan sadayana polder) sareng sered kana proyék énggal bari nahan tombol Alt. Nalika anjeun nyéred, anjeun bakal ningali yén nalika anjeun mencét tombol Alt, kursor beurit bakal robih tina tanda tambah kana panah.
    UPS: Kuring nyieun kabingungan saeutik dina ayat ieu - pikeun nransper sababaraha file anjeun kudu tahan Pergeseran + Alt!

Saatos ngalaksanakeun prosedur, urang bakal gaduh file dina proyék kadua Kelas1.cs sareng ikon anu saluyu (panah biru):

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

Nalika ngédit kode dina jandela redaktur, anjeun ogé tiasa milih kontéks proyék mana pikeun nampilkeun kodeu, anu bakal ngamungkinkeun anjeun ningali kode anu diédit dina simbol kompilasi kondisional anu béda:

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

Urang nyieun sagala proyék séjén (2017-2020) ngagunakeun skéma ieu. Life hack - upami anjeun nyered file dina Solution Explorer sanés tina proyék dasar, tapi tina proyék dimana aranjeunna parantos diselapkeun salaku tautan, maka anjeun henteu kedah nahan tombol Alt!

Pilihan anu dijelaskeun lumayan saé dugi ka waktos nambihan versi énggal tina plugin atanapi dugi ka waktos nambihan file énggal kana proyék - sadayana ieu janten pikasieuneun. Sareng nembe kuring ujug-ujug sadar kumaha nyortir sadayana sareng hiji proyék sareng urang nuju kana metode anu kadua

The magic tina konfigurasi

Sanggeus réngsé maca di dieu, Anjeun bisa ngagero, "Naha anjeun ngajelaskeun metoda kahiji, lamun artikel langsung ngeunaan kadua?!" Sareng kuring ngajelaskeun sadayana supados langkung écés naha urang peryogi simbol kompilasi kondisional sareng di tempat-tempat anu béda-béda proyék urang. Sareng ayeuna janten langkung jelas pikeun urang naon bédana dina proyék anu kedah urang laksanakeun, ngan ukur nyésakeun hiji proyék.

Sarta sangkan sagalana leuwih atra, urang moal nyieun hiji proyék anyar, tapi bakal nyieun parobahan proyék urang ayeuna dijieun dina cara munggaran.

Janten, mimitina, urang ngahapus sadaya proyék tina solusi kecuali anu utami (ngandung file langsung). Jelema. proyék pikeun versi 2016-2020. Buka folder sareng solusi sareng hapus polder proyék ieu di dinya.

Kami ngagaduhan hiji proyék anu tinggaleun dina kaputusan kami - MySuperPluginForRevit_2015. Buka sipatna sareng:

  1. Dina tab "aplikasi"Hapus sufiks tina nami rakitan _2015 (Bakal janten jelas naha engké)
  2. Dina tab "Majelis»nyabut simbol kompilasi kondisional R2015 ti widang pakait

Catetan: versi panganyarna tina Visual Studio boga bug - simbol kompilasi kondisional teu dipintonkeun dina jandela sipat proyék, sanajan aranjeunna sadia. Upami Anjeun ngalaman glitch ieu, mangka anjeun kudu nyabut eta sacara manual tina file .csproj. Najan kitu, urang masih kudu digawé di dinya, jadi baca terus.

Ganti ngaran proyek dina jandela Solution Explorer ku ngaleungitkeun sufiks _2015 lajeng nyabut proyék ti solusi. Ieu diperlukeun pikeun ngajaga urutan jeung parasaan perfectionists! Kami muka folder solusi kami, ganti nami folder proyék di dinya ku cara anu sami sareng muatkeun proyék deui kana solusi.

Buka manajer konfigurasi. Konfigurasi AS ngabebaskeun prinsipna mah, eta moal diperlukeun, sangkan ngahapus eta. Urang nyieun konfigurasi anyar jeung ngaran nu geus akrab jeung urang R2015, R2016,..., R2020. Catet yén anjeun henteu kedah nyalin setélan tina konfigurasi anu sanés sareng anjeun henteu kedah nyiptakeun konfigurasi proyék:

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

Pindah ka polder sareng proyék sareng buka file nganggo ekstensi .csproj dina editor anu cocog pikeun anjeun. Ku jalan kitu, anjeun ogé tiasa ngabuka éta dina Visual Studio - anjeun kedah ngabongkar momotan proyék teras item anu dipikahoyong bakal aya dina ménu kontéks:

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

Ngédit dina Visual Studio malah leuwih hade, sabab redaktur duanana aligns na prompts.

Dina file urang bakal ningali elemen PropertyGroup - di luhur pisan anu umum, lajeng datang kaayaanana. Unsur ieu nyetél sipat proyék nalika diwangun. Unsur kahiji, nu tanpa kaayaan, susunan sipat umum, sarta elemen kalawan kaayaan, sasuai, ngarobah sababaraha sipat gumantung kana konfigurasi.

Pindah ka umum (mimiti) unsur PropertyGroup jeung kasampak di harta Ngaran Majelis – ieu téh ngaran rakitan jeung urang kudu boga eta tanpa ahiran _2015. Upami aya sufiks, teras cabut.

Pananjung unsur kalawan kaayaan

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

Kami henteu peryogi - kami ngahapus.

Unsur kalawan kaayaan

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

bakal diperlukeun pikeun digawé di panggung ngembangkeun kode jeung debugging. Anjeun tiasa ngarobih sipatna pikeun nyocogkeun ka kabutuhan anjeun - nyetél jalur kaluaran anu béda, ngarobih simbol kompilasi kondisional, jsb.

Ayeuna hayu urang nyieun elemen anyar PropertyGroup pikeun konfigurasi urang. Dina elemen ieu urang ngan perlu nyetél opat sipat:

  • OutputPath - folder kaluaran. Kuring nyetel nilai standar binR20xx
  • DefineConstants - simbol kompilasi kondisional. Nileyna kudu dieusian TINGKAT; R20хх
  • TargetFrameworkVersion - Vérsi platform. Versi béda tina API Revit merlukeun platform béda pikeun dieusian.
  • Ngaran Majelis – ngaran assembly (ie ngaran file). Anjeun tiasa nyerat nami pasti tina assembly, tapi pikeun versatility I nyarankeun nulis nilai $(AssemblyName)_20хх. Jang ngalampahkeun ieu, urang saacanna ngaleungitkeun sufiks tina nami assembly

Fitur anu paling penting tina sadaya elemen ieu nyaéta yén aranjeunna tiasa disalin kana proyék sanés tanpa ngarobih pisan. Engké dina artikel bakal ngagantelkeun sakabeh eusi file .csproj.

Oké, kami geus ilahar kaluar sipat proyék - teu hese. Tapi naon anu kudu dilakukeun sareng perpustakaan plug-in (pakét NuGet). Upami urang ningali langkung jauh, urang bakal ningali yén perpustakaan anu kalebet dina unsur-unsurna ItemGroup. Tapi nasib goréng - unsur ieu leres ngolah kaayaan salaku unsur PropertyGroup. Panginten ieu mangrupikeun glitch Visual Studio, tapi upami anjeun netepkeun sababaraha elemen ItemGroup kalawan kaayaan konfigurasi, sarta nyelapkeun Tumbu béda kana bungkusan NuGet jero, lajeng mun anjeun ngarobah konfigurasi nu, kabéh pakét dieusian disambungkeun ka proyek.

Unsur datang ka bantuan urang milih, anu dianggo nurutkeun logika biasa urang upami-teras-sanésna.

Ngagunakeun unsur milih, urang nyetel bungkusan NuGet béda pikeun konfigurasi béda:

Sadaya eusi 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>

Perhatikeun yén dina salah sahiji kaayaan kuring dieusian dua konfigurasi via ATAWA. Ku cara ieu pakét anu diperyogikeun bakal dihubungkeun salami konfigurasi debug.

Sarta di dieu urang boga ampir sagalana sampurna. Kami ngamuat proyék deui, aktipkeun konfigurasi anu urang peryogikeun, nyauran itemna " dina menu kontéks solusi (sanés proyék)Mulangkeun sadaya pakét NuGet"Sareng urang ningali kumaha bungkusan urang robih.

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

Sareng dina tahap ieu kuring dugi ka jalan buntu - pikeun ngumpulkeun sadaya konfigurasi sakaligus, urang tiasa nganggo rakitan angkatan (menu "Majelis»->«Batch ngawangun"), tapi nalika gentos konfigurasi, bungkusan henteu otomatis disimpen deui. Sareng nalika ngarakit proyék, éta ogé henteu kajantenan, sanaos, dina téori, éta kedahna. Kuring henteu mendakan solusi pikeun masalah ieu nganggo cara standar. Sareng kamungkinan ieu ogé bug Visual Studio.

Ku alatan éta, pikeun ngumpulkeun angkatan, éta mutuskeun pikeun ngagunakeun sistem assembly otomatis husus Nuke. Sabenerna kuring henteu hoyong ieu, sabab kuring nganggap éta overkill dina kerangka pamekaran plugin, tapi ayeuna kuring henteu ningali solusi anu sanés. Sareng patarosan "Naha Nuke?" Jawabanna basajan - kami nganggo éta di tempat damel.

Janten, angkat ka folder solusi kami (sanés proyék), tahan konci ngarobah sareng klik katuhu dina rohangan kosong dina polder - dina ménu kontéks pilih itemna "Buka jandela PowerShell di dieu".

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

Upami anjeun teu acan dipasang nuke, teras nyerat heula paréntahna

dotnet tool install Nuke.GlobalTool –global

Ayeuna nyerat paréntah nuke tur anjeun bakal dipenta pikeun ngonpigurasikeun nuke pikeun proyék ayeuna. Kuring henteu weruh kumaha carana nulis ieu leuwih bener dina basa Rusia - dina basa Inggris bakal ditulis Could not find .nuke file. Naha anjeun badé nyetél ngawangun? [y/n]

Pencét konci Y lajeng bakal aya item setelan langsung. Urang kudu pilihan pangbasajanna ngagunakeun MSBuild, ku kituna urang ngajawab saperti dina screenshot:

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

Hayu urang angkat ka Visual Studio, anu bakal ngadorong urang pikeun ngamuat deui solusina, sabab aya proyék énggal. Urang ngamuat deui solusi sareng ningali yén urang gaduh proyék ngawangun dimana urang museurkeun ngan hiji file - Build.cs

Urang nyieun hiji proyék plugin kalawan kompilasi pikeun versi béda tina Revit / AutoCAD

Buka file ieu sareng nyerat naskah pikeun ngawangun proyék pikeun sadaya konfigurasi. Nya, atanapi nganggo skrip kuring, anu anjeun tiasa édit pikeun nyocogkeun ka kabutuhan anjeun:

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

Urang balik deui ka jandela PowerShell jeung nulis paréntah deui nuke (Anjeun tiasa nyerat paréntah nuke nuduhkeun diperlukeun tujuan. Tapi urang boga hiji tujuan, anu dijalankeun sacara standar). Saatos mencet tombol Lebetkeun, urang bakal ngarasa kawas hacker nyata, sabab, kawas dina pilem, proyék urang bakal otomatis dirakit pikeun konfigurasi béda.

Ku jalan kitu, anjeun tiasa nganggo PowerShell langsung tina Visual Studio (menu "pintonan»->«Jandéla séjén»->«Paket Manajer Konsol"), tapi sagalana bakal hideung bodas, nu teu pisan merenah.

Ieu menyimpulkan artikel abdi. Kuring yakin yén anjeun tiasa terang pilihan pikeun AutoCAD sorangan. Kuring miharep yén bahan dibere dieu bakal manggihan na "klien".

Hatur nuhun kanggo nengetan!

sumber: www.habr.com

Tambahkeun komentar