Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

Kung nagpalambo sa mga plug-in alang sa mga aplikasyon sa CAD (sa akong kaso kini mao ang AutoCAD, Revit ug Renga) sa paglabay sa panahon, usa ka problema ang makita - bag-ong mga bersyon sa mga programa ang gipagawas, ang ilang mga pagbag-o sa API ug ang mga bag-ong bersyon sa mga plugin kinahanglan nga himoon.

Kung ikaw adunay usa ra ka plugin o ikaw usa pa ka natudlo sa kaugalingon nga nagsugod sa kini nga negosyo, mahimo ka nga maghimo usa ka kopya sa proyekto, usba ang kinahanglan nga mga lugar niini ug maghimo usa ka bag-ong bersyon sa plugin. Tungod niini, ang sunod nga mga pagbag-o sa code magkinahanglan usa ka daghang pagtaas sa gasto sa pagtrabaho.

Samtang nakakuha ka og kasinatian ug kahibalo, makit-an nimo ang daghang mga paagi aron ma-automate kini nga proseso. Miadto ko niini nga paagi ug gusto nakong isulti kanimo kung unsa ang akong natapos ug kung unsa kini ka komportable.

Una, tan-awon nato ang usa ka paagi nga klaro ug dugay na nakong gigamit

Mga link sa mga file sa proyekto

Ug aron mahimo ang tanan nga yano, tin-aw ug masabtan, akong ihulagway ang tanan gamit ang usa ka abstract nga pananglitan sa pag-uswag sa plugin.

Atong ablihan ang Visual Studio (naa koy bersyon sa Community 2019. Ug oo - sa Russian) ug paghimo og bag-ong solusyon. Tawgon nato ni MySuperPluginForRevit

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

Maghimo kami usa ka plugin alang sa Revit alang sa mga bersyon 2015-2020. Busa, maghimo ko og bag-ong proyekto sa solusyon (Net Framework Class Library) ug tawgon kini MySuperPluginForRevit_2015

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

Kinahanglan namon nga idugang ang mga pakisayran sa Revit API. Siyempre, makadugang kami og mga link sa lokal nga mga file (kinahanglan nimo nga i-install ang tanang gikinahanglan nga SDK o tanang bersyon sa Revit), apan diretso mi ug iapil ang NuGet package. Makita nimo ang pipila ka mga pakete, apan gamiton nako ang akong kaugalingon.

Human makonektar ang package, pag-right-click sa butang "mga pakisayran' ug pilia ang menu item 'Ibalhin ang packages.config sa PackageReference...Β»

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

Kung kalit ka nga magsugod sa kalisang sa kini nga lugar, tungod kay wala’y hinungdanon nga butang sa bintana sa mga kabtangan sa package "kopyaha sa lokal”, nga kinahanglan gyud natong itakda bakak nga mga, unya ayaw panic - adto sa folder sa proyekto, ablihi ang file gamit ang .csproj extension sa editor nga kombenyente para nimo (gamit ko ang Notepad ++) ug pangitag entry bahin sa among package didto. Ingon ani siya karon:

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

Pagdugang ug kabtangan niini runtime. Kini mahitabo nga sama niini:

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

Karon, kung magtukod usa ka proyekto, ang mga file gikan sa package dili makopya sa output folder.
Magpadayon ta - hunahunaa lang nga ang among plugin mogamit usa ka butang gikan sa Revit API, nga nagbag-o sa paglabay sa panahon sa pagpagawas sa mga bag-ong bersyon. Aw, o kinahanglan lang namon nga usbon ang among kaugalingon sa code, depende sa bersyon sa Revit diin among gihimo ang plugin. Aron masulbad ang ingon nga mga kalainan sa code, mogamit kami mga simbolo sa paghugpong sa kondisyon. Ablihi ang mga kabtangan sa proyekto, adto sa tab "Assembly"ug sa kapatagan"Conditional compilation notationΒ»isulat R2015.

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

Timan-i nga ang simbolo kinahanglang idugang para sa Debug configuration ug Release configuration.

Aw, samtang naa kami sa bintana sa mga kabtangan, moadto dayon kami sa tab "Paggamit"ug sa kapatagan"Default nga namespaceΒ»kuhaa ang suffix _2015aron ang among namespace unibersal ug independente sa ngalan sa asembliya:

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

Sa akong kaso, sa katapusan nga produkto, ang mga plugin sa tanan nga mga bersyon gidugang sa usa ka folder, mao nga ang akong mga ngalan sa asembliya nagpabilin sa suffix sa porma. _20xx. Apan mahimo usab nimo nga tangtangon ang suffix gikan sa ngalan sa asembliya kung imong gipaabut nga ang mga file mahimutang sa lainlaing mga folder.

Adto ta sa code sa file Klase1.cs ug i-simulate ang pipila ka code didto, nga gikonsiderar ang lainlaing mga bersyon sa 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;
        }
    }
}

Gihunahuna dayon nako ang tanan nga mga bersyon sa Revit sa ibabaw sa 2015 nga bersyon (nga sa panahon sa pagsulat sa artikulo) ug diha-diha dayon gikonsiderar ang presensya sa mga simbolo sa paghugpong sa kondisyon nga akong gihimo sumala sa parehas nga template.

Mopadayon ta sa pangunang highlight. Naghimo kami og bag-ong proyekto sa among solusyon, alang lamang sa plug-in nga bersyon ubos sa Revit 2016. Gisubli namo ang tanan nga mga lakang nga gihulagway sa ibabaw, matag usa, gipulihan ang numero 2015 sa numero nga 2016. Apan ang file Klase1.cs gikuha gikan sa bag-ong proyekto.

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

File nga adunay gikinahanglan nga code - Klase1.cs - naa na kami ug kinahanglan na lang namon nga isulud ang usa ka link niini sa usa ka bag-ong proyekto. Adunay duha ka paagi sa pagsal-ot sa mga link:

  1. Dugay - pag-klik sa proyekto gamit ang tuo nga buton sa mouse, pilia ang aytem "IdugangΒ»->Β«Anaa nga elemento", sa bintana nga nagbukas, pangitaa ang gusto nga file ug imbes nga kapilian"IdugangΒ» pilia ang opsyon Β«Idugang isip linkΒ»

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

  1. Mubo - diha mismo sa solution explorer, pilia ang gusto nga file (o bisan mga file. O bisan tibuok folder) ug i-drag kini ngadto sa bag-ong proyekto samtang gipugngan ang Alt key. Sa diha nga nag-drag, imong makita nga sa diha nga imong gipugos ang Alt key, ang cursor sa mouse mausab gikan sa usa ka plus sign ngadto sa usa ka arrow.
    UPS: Naghimo ako usa ka gamay nga kalibog sa kini nga parapo - aron mabalhin ang daghang mga file, kinahanglan nimo nga i-clamp Pagbalhin + Alt!

Human sa pamaagi, kita adunay usa ka file sa ikaduhang proyekto Klase1.cs uban ang katugbang nga icon (asul nga arrow):

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

Kung nag-edit sa code sa bintana sa editor, mahimo ka usab makapili sa konteksto kung unsang proyekto ang ipakita ang code, nga magtugot kanimo nga makita ang code nga gi-edit nga adunay lainlaing mga simbolo sa paghugpong sa kondisyon:

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

Sumala sa kini nga laraw, gihimo namon ang tanan nga uban pang mga proyekto (2017-2020). Life hack - kung imong i-drag ang mga file sa solution explorer dili gikan sa base nga proyekto, apan gikan sa proyekto diin sila gisal-ot na ingon usa ka link, nan dili nimo mapugngan ang Alt key!

Ang gihulagway nga kapilian maayo kaayo hangtod ang usa ka bag-ong bersyon sa plugin idugang o hangtod ang mga bag-ong file idugang sa proyekto - kining tanan mahimong labi ka makahadlok. Ug bag-ohay lang, kalit ko nga naamgohan kung unsaon paghan-ay ang tanan sa usa ka proyekto ug nagpadayon kami sa ikaduhang pamaagi.

Magic sa Configuration

Human sa pagbasa dinhi, mahimo kang mopatugbaw, "Unsa man ang imong gihulagway sa unang pamaagi, kung ang artikulo diha-diha dayon mahitungod sa ikaduha?!". Ug gihubit nako ang tanan aron mas klaro kung ngano nga kinahanglan namon ang mga simbolo sa paghugpong sa kondisyon ug kung unsang mga lugar ang magkalainlain ang among mga proyekto. Ug karon mas klaro na kanato kung unsa nga matang sa mga kalainan sa proyekto ang kinahanglan natong ipatuman, nga magbilin lamang og usa ka proyekto.

Ug aron mas klaro ang tanan, dili kami maghimo usa ka bag-ong proyekto, apan maghimo kami mga pagbag-o sa among karon nga proyekto nga gihimo sa una nga paagi.

Mao nga, una sa tanan, gikuha namon ang tanan nga mga proyekto gikan sa solusyon, gawas sa panguna (nga adunay direkta nga mga file). Mga. mga proyekto alang sa mga bersyon 2016-2020. Ablihi ang folder nga adunay solusyon ug kuhaa ang mga folder sa kini nga mga proyekto didto.

Kami adunay usa ka proyekto nga nahabilin sa solusyon - MySuperPluginForRevit_2015. Ablihi ang mga kabtangan niini ug:

  1. Sa tab nga "PaggamitΒ» kuhaa ang suffix gikan sa ngalan sa asembliya _2015 (Kini mahimong klaro kung ngano sa ulahi)
  2. Sa tab nga "AssemblyΒ»kuhaa ang conditional compilation nga simbolo R2015 gikan sa katugbang nga natad

Mubo nga sulat: Adunay usa ka glitch sa pinakabag-o nga bersyon sa Visual Studio - conditional compilation nga mga simbolo wala gipakita sa project properties window, bisan kini anaa. Kung naa kay glitch, nan kinahanglan nimo nga tangtangon sila sa kamut gikan sa .csproj file. Bisan pa, kinahanglan pa naton nga buhaton kini, busa basaha.

Usba ang ngalan sa proyekto sa window sa Solution Explorer pinaagi sa pagtangtang sa suffix _2015 ug dayon kuhaa ang proyekto gikan sa solusyon. Kini mao ang gikinahanglan aron sa pagpadayon sa kahusay ug mga pagbati sa mga perpeksiyonista! Ablihi ang folder sa among solusyon, usba ang ngalan sa folder sa proyekto sa parehas nga paagi ug i-load ang proyekto balik sa solusyon.

Ablihi ang configuration manager. US configuration release sa prinsipyo, dili kini kinahanglan, mao nga atong tangtangon kini. Naghimo kami og bag-ong mga configuration nga adunay mga ngalan nga pamilyar na kanamo R2015, R2016, ..., R2020. Timan-i nga dili nimo kinahanglan kopyahon ang mga setting gikan sa ubang mga pag-configure ug dili nimo kinahanglan nga maghimo mga pag-configure sa proyekto:

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

Moadto kami sa folder nga adunay proyekto ug ablihan ang file gamit ang .csproj extension sa usa ka editor nga kombenyente alang kanimo. Pinaagi sa dalan, mahimo usab nimo kini ablihan sa Visual Studio - kinahanglan nimo nga idiskarga ang proyekto ug unya ang husto nga butang naa sa menu sa konteksto:

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

Ang pag-edit sa Visual Studio mas maayo pa, tungod kay ang editor parehas nga nag-align ug nag-aghat.

Sa file atong makita ang mga elemento PropertyGroup - sa pinakataas mao ang heneral, ug unya moabut uban sa mga kondisyon. Kini nga mga elemento nagtakda sa mga kabtangan sa proyekto kung kini gitukod. Ang una nga elemento, nga walay kondisyon, nagtakda sa kinatibuk-ang mga kabtangan, ug ang mga elemento nga adunay mga kondisyon, matag usa, nagbag-o sa pipila ka mga kabtangan depende sa mga pag-configure.

Lakaw ngadto sa komon (una) nga elemento PropertyGroup ug tan-awa ang kabtangan Ngalan sa Asembliya - kini ang ngalan sa asembliya ug kinahanglan nga aduna kita niini nga walay suffix _2015. Kung adunay suffix, unya kuhaa kini.

Pagpangita usa ka elemento nga adunay kondisyon

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

Wala namo kini kinahanglana - among gitangtang kini.

Elemento nga adunay kondisyon

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

gikinahanglan aron magtrabaho sa yugto sa pag-uswag ug pag-debug sa code. Mahimo nimong usbon ang mga kabtangan niini aron mohaum sa imong mga panginahanglan - pagtakda og lain-laing mga agianan sa output, pagbag-o sa mga simbolo sa paghugpong sa kondisyon, ug uban pa.

Karon naghimo kami bag-ong mga elemento PropertyGroup para sa among mga configuration. Niini nga mga elemento, kinahanglan lang nga magbutang kami og upat ka mga kabtangan:

  • OutputPath - folder sa output. Gibutang nako ang default nga kantidad binR20xx
  • DefineConstants mga conditional compilation nga mga simbolo. Kinahanglan nga itakda sa TRACE;R20xx
  • TargetFrameworkVersion - bersyon sa plataporma. Ang lainlaing mga bersyon sa Revit API nanginahanglan lainlaing mga platform nga itakda.
  • Ngalan sa Asembliya - ngalan sa asembliya (ie ngalan sa file). Mahimo nimong isulat direkta ang gitinguha nga ngalan sa asembliya, apan alang sa universality, gitambagan ko ikaw nga isulat ang kantidad $(AssemblyName)_20xx. Aron mahimo kini, gikuha namon kaniadto ang suffix gikan sa ngalan sa asembliya

Ang labing hinungdanon nga bahin sa tanan nga kini nga mga elemento mao nga mahimo silang kopyahon sa ubang mga proyekto nga wala’y pagbag-o. Sa ulahi sa artikulo, akong ilakip ang tibuok nga sulod sa .csproj file.

Aw, nahibal-an namon ang mga kabtangan sa proyekto - dili kini lisud. Apan unsa ang buhaton sa gilakip nga mga librarya (NuGet packages). Kung tan-awon pa nato, atong makita nga ang gilakip nga mga librarya gipiho sa mga elemento ItemGroup. Apan ania ang problema - kini nga elemento dili husto nga nagproseso sa mga kondisyon, ingon usa ka elemento PropertyGroup. Tingali kini usa ka Visual Studio glitch, apan kung nagtakda ka daghang mga elemento ItemGroup nga adunay mga kondisyon sa pag-configure, ug isulud ang lainlaing mga link sa mga pakete sa NuGet sa sulod, unya kung gibag-o ang pagsumpo, ang tanan nga piho nga mga pakete konektado sa proyekto.

Usa ka elemento ang motabang kanato Pagpili, nga naglihok sumala sa lohika nga pamilyar kanato kung-unya-sa uban pa.

Paggamit sa elemento Pagpili, itakda ang lainlaing mga pakete sa NuGet alang sa lainlaing mga pag-configure:

Ang tanan nga sulod sa 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>

Palihug timan-i nga sa usa sa mga kondisyon akong gipiho ang duha ka mga configuration pinaagi sa O. Sa ingon, ang gikinahanglan nga pakete makonektar sa panahon sa pag-configure Debug.

Ug dinhi kita hapit hingpit. Gi-load namo ang proyekto balik, ilakip ang configuration nga among gikinahanglan, tawagan ang menu sa konteksto sa solusyon (dili ang proyekto) ang butang "Ibalik ang tanan nga mga pakete sa NuGet” ug tan-awa kung giunsa pagbag-o ang among mga pakete.

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

Ug sa kini nga yugto, nakaabut ako sa usa ka patay nga katapusan - aron makolekta ang tanan nga mga pag-configure sa usa ka higayon, magamit namon ang batch assembly (menu "AssemblyΒ»->Β«Batch nga asembliya”), apan kung mag-ilis sa mga pag-configure, ang mga pakete dili awtomatikong ibalik. Ug kung ang pag-assemble sa proyekto, dili usab kini mahitabo, bisan pa, sa teorya, kinahanglan kini. Wala koy nakit-an nga solusyon niini nga problema pinaagi sa standard nga paagi. Ug lagmit kini usa usab ka bug sa Visual Studio.

Busa, alang sa batch assembly, nakahukom nga gamiton ang usa ka espesyal nga automated assembly system Nuke. Dili gyud nako gusto kini tungod kay sa akong hunahuna kini sobra ra sa mga termino sa pag-uswag sa plugin, apan sa pagkakaron wala koy nakita nga lain nga solusyon. Ug sa pangutana nga "Ngano nga Nuke?" Ang tubag yano - gigamit namon kini sa trabaho.

Busa, adto sa folder sa among solusyon (dili ang proyekto), pugngi ang yawe pagbalhin ug pag-right-click sa usa ka walay sulod nga luna sa folder - sa menu sa konteksto, pilia ang butang "Ablihi ang bintana sa PowerShell dinhi".

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

Kung wala pa nimo ma-install nuke, dayon isulat una ang sugo

dotnet tool install Nuke.GlobalTool –global

Karon pagsulat og usa ka sugo nuke ug ikaw pagaaghaton sa pag-configure nuke alang sa kasamtangan nga proyekto. Wala ko kahibalo unsaon pagsulat niini sa Russian nga husto - sa English kini isulat Could not find .nuke file. Gusto ba nimong mag-setup ug build? [y/n]

Pindota ang Y nga yawe ug unya adunay direkta nga mga setting. Gusto namon ang pinakasimple nga kapilian sa paggamit MSBuild, mao nga kami motubag sama sa screenshot:

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

Adto kita sa Visual Studio, nga mag-aghat kanato sa pag-reload sa solusyon, tungod kay usa ka bag-ong proyekto ang gidugang niini. I-reload ang solusyon ug tan-awa nga kami adunay proyekto pagtukod diin kami interesado lamang sa usa ka file - Build.cs

Naghimo kami usa ka proyekto sa plugin nga adunay kompilasyon alang sa lainlaing mga bersyon sa Revit / AutoCAD

Among giablihan kini nga payl ug nagsulat og script para matukod ang proyekto para sa tanang configuration. Aw, o gamita ang akong script, nga mahimo nimong usbon alang sa imong kaugalingon:

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

Mibalik kami sa bintana sa PowerShell ug isulat pag-usab ang sugo nuke (mahimo nimong isulat ang mando nuke nagpaila sa gikinahanglan target. Pero naa mi target, nga nagsugod sa default). Human sa pagpindot sa Enter key, mobati kami nga tinuod nga mga hacker, tungod kay, sama sa usa ka salida, ang among proyekto awtomatik nga matigom alang sa lain-laing mga configuration.

Pinaagi sa dalan, mahimo nimong gamiton ang PowerShell direkta gikan sa Visual Studio (menu "panglantawΒ»->Β«Ang ubang mga bintanaΒ»->Β«Package Manager Console”), apan ang tanan mahimong itom ug puti, nga dili kaayo kombenyente.

Kini nagtapos sa akong artikulo. Sigurado ako nga mahimo nimong mahibal-an ang kapilian alang sa AutoCAD sa imong kaugalingon. Nanghinaut ko nga ang materyal nga gipresentar dinhi makit-an ang "mga kliyente".

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

Source: www.habr.com

Idugang sa usa ka comment