Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Wrth ddatblygu ategion ar gyfer cymwysiadau CAD (yn fy achos i rhain yw AutoCAD, Revit a Renga) dros amser, mae un broblem yn ymddangos - fersiynau newydd o raglenni yn cael eu rhyddhau, eu newidiadau API ac mae angen gwneud fersiynau newydd o ategion.

Pan mai dim ond un ategyn sydd gennych chi neu os ydych chi'n dal i fod yn ddechreuwr hunanddysgedig yn y mater hwn, gallwch chi wneud copi o'r prosiect, newid y lleoedd angenrheidiol ynddo a chydosod fersiwn newydd o'r ategyn. Yn unol â hynny, bydd newidiadau dilynol i'r cod yn golygu cynnydd lluosog mewn costau llafur.

Wrth i chi ennill profiad a gwybodaeth, fe welwch sawl ffordd o awtomeiddio'r broses hon. Cerddais y llwybr hwn ac rwyf am ddweud wrthych beth yn y diwedd a pha mor gyfleus ydyw.

Yn gyntaf, gadewch i ni edrych ar ddull sy'n amlwg ac yr wyf wedi'i ddefnyddio ers amser maith.

Dolenni i ffeiliau prosiect

Ac i wneud popeth yn syml, yn weledol ac yn ddealladwy, byddaf yn disgrifio popeth gan ddefnyddio enghraifft haniaethol o ddatblygiad ategyn.

Gadewch i ni agor Visual Studio (mae gen i fersiwn 2019 Cymunedol. Ac ie - yn Rwsieg) a chreu ateb newydd. Gadewch i ni ei alw MySuperPluginForRevit

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Byddwn yn gwneud ategyn ar gyfer Revit ar gyfer fersiynau 2015-2020. Felly, gadewch i ni greu prosiect newydd yn yr ateb (Llyfrgell Dosbarth Fframwaith Net) a'i alw MySuperPluginForRevit_2015

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Mae angen i ni ychwanegu dolenni at API Revit. Wrth gwrs, gallwn ychwanegu dolenni i ffeiliau lleol (bydd angen i ni osod yr holl SDKs angenrheidiol neu bob fersiwn o Revit), ond byddwn yn dilyn y llwybr cywir ar unwaith ac yn cysylltu'r pecyn NuGet. Gallwch ddod o hyd i dipyn o becynnau, ond byddaf yn defnyddio fy mhen fy hun.

Ar ôl cysylltu'r pecyn, de-gliciwch ar yr eitem “cyfeiriadau" a dewis yr eitem "Symud pecynnau.config i PackageReference...»

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Os yn sydyn ar y pwynt hwn byddwch chi'n dechrau mynd i banig, oherwydd yn y ffenestr priodweddau pecyn ni fydd unrhyw eitem bwysig "Copïwch yn lleol", y mae angen i ni ei osod i'r gwerth yn bendant ffug, yna peidiwch â chynhyrfu - ewch i'r ffolder gyda'r prosiect, agorwch y ffeil gyda'r estyniad .csproj mewn golygydd sy'n gyfleus i chi (rwy'n defnyddio Notepad ++) a dewch o hyd i gofnod am ein pecyn yno. Mae hi'n edrych fel hyn nawr:

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

Ychwanegu eiddo iddo amser rhedeg. Bydd yn troi allan fel hyn:

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

Nawr, wrth adeiladu prosiect, ni fydd ffeiliau o'r pecyn yn cael eu copïo i'r ffolder allbwn.
Awn ni ymhellach - gadewch i ni ddychmygu ar unwaith y bydd ein ategyn yn defnyddio rhywbeth o'r API Revit, sydd wedi newid dros amser pan fydd fersiynau newydd wedi'u rhyddhau. Wel, neu mae angen i ni newid rhywbeth yn y cod yn dibynnu ar y fersiwn o Revit yr ydym yn gwneud yr ategyn ar ei gyfer. I ddatrys gwahaniaethau o'r fath mewn cod, byddwn yn defnyddio symbolau llunio amodol. Agorwch briodweddau'r prosiect, ewch i'r tab “Cynulliad" ac yn y maes "Nodiant llunio amodol" gadewch i ni ysgrifennu R2015.

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Sylwch fod yn rhaid ychwanegu'r symbol ar gyfer y ffurfweddiadau Dadfygio a Rhyddhau.

Wel, tra ein bod ni yn y ffenestr eiddo, rydyn ni'n mynd ar unwaith i'r tab “Cais" ac yn y maes "gofod enw diofyn» tynnu'r ôl-ddodiad _2015fel bod ein gofod enwau yn gyffredinol ac yn annibynnol ar enw'r cynulliad:

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Yn fy achos i, yn y cynnyrch terfynol, mae ategion o bob fersiwn yn cael eu rhoi mewn un ffolder, felly mae fy enwau cynulliad yn aros gydag ôl-ddodiad y ffurflen _20хх. Ond gallwch hefyd dynnu'r ôl-ddodiad o enw'r cynulliad os yw'r ffeiliau i fod i gael eu lleoli mewn gwahanol ffolderi.

Gadewch i ni fynd at y cod ffeil Dosbarth1.cs ac efelychu rhyw god yno, gan gymryd i ystyriaeth fersiynau gwahanol o 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;
        }
    }
}

Cymerais i ystyriaeth ar unwaith bob fersiwn o Revit uwchben fersiwn 2015 (a oedd ar gael ar adeg ysgrifennu) ac ar unwaith cymerais i ystyriaeth bresenoldeb symbolau llunio amodol, sy'n cael eu creu gan ddefnyddio'r un templed.

Symudwn ymlaen at y prif uchafbwynt. Rydym yn creu prosiect newydd yn ein datrysiad, dim ond ar gyfer y fersiwn o'r ategyn ar gyfer Revit 2016. Rydym yn ailadrodd yr holl gamau a ddisgrifir uchod, yn y drefn honno, gan ddisodli'r rhif 2015 gyda'r rhif 2016. Ond mae'r ffeil Dosbarth1.cs dileu o'r prosiect newydd.

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Ffeil gyda'r cod gofynnol - Dosbarth1.cs – mae gennym ni eisoes a does ond angen i ni fewnosod dolen iddo mewn prosiect newydd. Mae dwy ffordd i fewnosod dolenni:

  1. Hir – de-gliciwch ar y prosiect a dewis “Ychwanegu»->«Elfen bresennol", yn y ffenestr sy'n agor, darganfyddwch y ffeil angenrheidiol ac yn lle'r opsiwn "Ychwanegu" dewiswch yr opsiwn "Ychwanegu fel cysylltiad»

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

  1. Byr - yn uniongyrchol yn yr archwiliwr datrysiadau, dewiswch y ffeil a ddymunir (neu hyd yn oed ffeiliau, neu hyd yn oed ffolderi cyfan) a'i lusgo i mewn i brosiect newydd wrth ddal yr allwedd Alt i lawr. Wrth i chi lusgo, fe welwch pan fyddwch chi'n pwyso'r allwedd Alt, bydd cyrchwr y llygoden yn newid o arwydd plws i saeth.
    DIWEDDARIAD: Gwnes ychydig o ddryswch yn y paragraff hwn - i drosglwyddo sawl ffeil dylech ddal i lawr Shift + Alt!

Ar ôl cyflawni'r weithdrefn, bydd gennym ffeil yn yr ail brosiect Dosbarth1.cs gyda'r eicon cyfatebol (saeth las):

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Wrth olygu cod yn ffenestr y golygydd, gallwch hefyd ddewis ym mha gyd-destun prosiect i arddangos y cod, a fydd yn caniatáu ichi weld y cod yn cael ei olygu o dan wahanol symbolau llunio amodol:

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Rydym yn creu pob prosiect arall (2017-2020) gan ddefnyddio’r cynllun hwn. Hac bywyd - os ydych chi'n llusgo ffeiliau yn yr Solution Explorer nid o'r prosiect sylfaenol, ond o'r prosiect lle maen nhw eisoes wedi'u mewnosod fel dolen, yna does dim rhaid i chi ddal yr allwedd Alt i lawr!

Mae'r opsiwn a ddisgrifir yn eithaf da tan yr eiliad o ychwanegu fersiwn newydd o'r ategyn neu tan yr eiliad o ychwanegu ffeiliau newydd i'r prosiect - mae hyn i gyd yn mynd yn ddiflas iawn. Ac yn ddiweddar sylweddolais yn sydyn yn sydyn sut i ddatrys y cyfan gydag un prosiect ac rydym yn symud ymlaen at yr ail ddull

Hud cyfluniadau

Ar ôl gorffen darllen yma, fe allech chi ddweud, “Pam wnaethoch chi ddisgrifio'r dull cyntaf, os yw'r erthygl yn ymwneud â'r ail ar unwaith?!” A disgrifiais bopeth i'w gwneud yn gliriach pam mae angen symbolau llunio amodol arnom ac ym mha leoedd y mae ein prosiectau'n wahanol. Ac yn awr mae'n dod yn gliriach i ni yn union pa wahaniaethau mewn prosiectau y mae angen i ni eu gweithredu, gan adael dim ond un prosiect.

Ac i wneud popeth yn fwy amlwg, ni fyddwn yn creu prosiect newydd, ond byddwn yn gwneud newidiadau i'n prosiect presennol a grëwyd yn y ffordd gyntaf.

Felly, yn gyntaf oll, rydym yn tynnu pob prosiect o'r datrysiad ac eithrio'r prif un (sy'n cynnwys y ffeiliau'n uniongyrchol). Y rhai. prosiectau ar gyfer fersiynau 2016-2020. Agorwch y ffolder gyda'r datrysiad a dileu ffolderi'r prosiectau hyn yno.

Mae gennym un prosiect ar ôl yn ein penderfyniad - MySuperPluginForRevit_2015. Agorwch ei briodweddau a:

  1. Ar y tab “Cais"tynnwch yr ôl-ddodiad o enw'r cynulliad _2015 (bydd yn dod yn amlwg pam yn ddiweddarach)
  2. Ar y tab “Cynulliad» dileu'r symbol llunio amodol R2015 o'r maes cyfatebol

Sylwch: mae gan y fersiwn ddiweddaraf o Visual Studio nam - nid yw symbolau llunio amodol yn cael eu harddangos yn ffenestr priodweddau'r prosiect, er eu bod ar gael. Os ydych chi'n profi'r glitch hwn, yna mae angen i chi eu tynnu â llaw o'r ffeil .csproj. Fodd bynnag, mae'n rhaid i ni weithio ynddo o hyd, felly darllenwch ymlaen.

Ail-enwi'r prosiect yn y ffenestr Solution Explorer trwy ddileu'r ôl-ddodiad _2015 ac yna tynnu'r prosiect o'r datrysiad. Mae hyn yn angenrheidiol i gynnal trefn a theimladau perffeithwyr! Rydym yn agor ffolder ein datrysiad, ailenwi ffolder y prosiect yno yn yr un modd ac yn llwytho'r prosiect yn ôl i'r datrysiad.

Agorwch y rheolwr ffurfweddu. Cyfluniad yr Unol Daleithiau Rhyddhau mewn egwyddor, ni fydd ei angen, felly rydym yn ei ddileu. Rydym yn creu ffurfweddiadau newydd gydag enwau sydd eisoes yn gyfarwydd i ni R2015, R2016,…, R2020. Sylwch nad oes angen i chi gopïo gosodiadau o ffurfweddiadau eraill ac nid oes angen i chi greu ffurfweddiadau prosiect:

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Ewch i'r ffolder gyda'r prosiect ac agorwch y ffeil gyda'r estyniad .csproj mewn golygydd sy'n gyfleus i chi. Gyda llaw, gallwch hefyd ei agor yn Visual Studio - mae angen i chi ddadlwytho'r prosiect ac yna bydd yr eitem a ddymunir yn y ddewislen cyd-destun:

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Mae golygu yn Visual Studio hyd yn oed yn well, gan fod y golygydd yn alinio ac yn annog.

Yn y ffeil byddwn yn gweld yr elfennau Grwp Eiddo - ar y brig yw'r un cyffredinol, ac yna daw'r amodau. Mae'r elfennau hyn yn gosod priodweddau'r prosiect pan gaiff ei adeiladu. Mae'r elfen gyntaf, sydd heb amodau, yn gosod eiddo cyffredinol, ac mae elfennau ag amodau, yn unol â hynny, yn newid rhai eiddo yn dibynnu ar y ffurfweddiadau.

Ewch i'r elfen gyffredin (gyntaf). Grwp Eiddo ac edrych ar yr eiddo CynnullEnw – dyma enw’r cynulliad a dylem ei gael heb ôl-ddodiad _2015. Os oes ôl-ddodiad, yna tynnwch ef.

Dod o hyd i elfen gyda chyflwr

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

Nid oes ei angen arnom - rydym yn ei ddileu.

Elfen â chyflwr

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

bydd angen gweithio ar y cam datblygu cod a dadfygio. Gallwch newid ei briodweddau i weddu i'ch anghenion - gosod llwybrau allbwn gwahanol, newid symbolau llunio amodol, ac ati.

Nawr, gadewch i ni greu elfennau newydd Grwp Eiddo am ein cyfluniadau. Yn yr elfennau hyn does ond angen i ni osod pedwar priodwedd:

  • Llwybr Allbwn - ffolder allbwn. Gosodais y gwerth rhagosodedig binR20xx
  • DiffinioCysoniaid – symbolau llunio amodol. Dylid nodi'r gwerth TRACE; R20хх
  • TargetFrameworkVersion - fersiwn platfform. Mae fersiynau gwahanol o'r API Revit yn gofyn am wahanol lwyfannau.
  • CynnullEnw – enw cynulliad (h.y. enw ffeil). Gallwch ysgrifennu union enw'r cynulliad, ond ar gyfer amlbwrpasedd rwy'n argymell ysgrifennu'r gwerth $(AssemblyName)_20хх. I wneud hyn, fe wnaethom dynnu'r ôl-ddodiad o enw'r cynulliad yn flaenorol

Nodwedd bwysicaf yr holl elfennau hyn yw y gellir eu copïo i brosiectau eraill heb eu newid o gwbl. Yn ddiweddarach yn yr erthygl byddaf yn atodi holl gynnwys y ffeil .csproj.

Iawn, rydym wedi cyfrifo priodweddau'r prosiect - nid yw'n anodd. Ond beth i'w wneud gyda llyfrgelloedd plug-in (pecynnau NuGet). Os edrychwn ymhellach, fe welwn fod y llyfrgelloedd a gynhwysir yn cael eu nodi yn yr elfennau Grŵp Eitem. Ond anlwc - mae'r elfen hon yn prosesu'r amodau'n anghywir fel elfen Grwp Eiddo. Efallai bod hyn hyd yn oed yn glitch Studio Visual, ond os ydych chi'n nodi sawl elfen Grŵp Eitem gydag amodau cyfluniad, a mewnosodwch wahanol ddolenni i becynnau NuGet y tu mewn, yna pan fyddwch chi'n newid y ffurfweddiad, mae'r holl becynnau penodedig yn gysylltiedig â'r prosiect.

Daw'r elfen i'n cymorth Dewiswch, sy'n gweithio yn ôl ein rhesymeg arferol os-yna-arall.

Defnyddio elfen Dewiswch, rydym yn gosod gwahanol becynnau NuGet ar gyfer gwahanol ffurfweddiadau:

Holl gynnwys 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>

Sylwch, o dan un o'r amodau, y nodais ddau gyfluniad trwy NEU. Fel hyn bydd y pecyn gofynnol yn cael ei gysylltu yn ystod y cyfluniad Dadfygio.

Ac yma mae gennym bron popeth yn berffaith. Rydyn ni'n llwytho'r prosiect yn ôl, yn galluogi'r ffurfweddiad sydd ei angen arnom, yn galw'r eitem “ yn newislen cyd-destun y datrysiad (nid y prosiect)Adfer holl becynnau NuGet“ac rydyn ni'n gweld sut mae ein pecynnau'n newid.

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Ac ar yr adeg hon deuthum i ben - er mwyn casglu'r holl ffurfweddiadau ar unwaith, gallem ddefnyddio swp-gynulliad (bwydlen "Cynulliad»->«Adeiladu swp"), ond wrth newid ffurfweddiadau, nid yw pecynnau'n cael eu hadfer yn awtomatig. Ac wrth gydosod y prosiect, nid yw hyn hefyd yn digwydd, er, mewn theori, y dylai. Nid wyf wedi dod o hyd i ateb i'r broblem hon gan ddefnyddio dulliau safonol. Ac yn fwyaf tebygol mae hwn hefyd yn nam Stiwdio Gweledol.

Felly, ar gyfer cynulliad swp, penderfynwyd defnyddio system cynulliad awtomataidd arbennig Nuke. Doeddwn i ddim eisiau hyn mewn gwirionedd oherwydd rwy'n meddwl ei fod yn ormodol o ran datblygu ategyn, ond ar hyn o bryd nid wyf yn gweld unrhyw ateb arall. Ac i'r cwestiwn "Pam Nuke?" Mae'r ateb yn syml - rydym yn ei ddefnyddio yn y gwaith.

Felly, ewch i ffolder ein datrysiad (nid y prosiect), daliwch yr allwedd i lawr Symud a de-gliciwch ar le gwag yn y ffolder - yn y ddewislen cyd-destun dewiswch yr eitem “Agorwch ffenestr PowerShell yma'.

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Os nad oes gennych chi ei osod nuke, yna ysgrifennwch y gorchymyn yn gyntaf

dotnet tool install Nuke.GlobalTool –global

Nawr ysgrifennwch y gorchymyn nuke a byddwch yn cael eich annog i ffurfweddu nuke ar gyfer y prosiect presennol. Dydw i ddim yn gwybod sut i ysgrifennu hwn yn fwy cywir yn Rwsieg - yn Saesneg bydd yn cael ei ysgrifennu Methu canfod ffeil .nuke. Ydych chi eisiau gosod adeilad? [y/n]

Pwyswch y fysell Y ac yna bydd eitemau gosodiadau uniongyrchol. Mae angen i ni ddefnyddio'r opsiwn symlaf MSBuild, felly rydym yn ateb fel yn y sgrinlun:

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Awn i Visual Studio, a fydd yn ein hannog i ail-lwytho'r datrysiad, gan fod prosiect newydd wedi'i ychwanegu ato. Rydyn ni'n ail-lwytho'r datrysiad ac yn gweld bod gennym ni brosiect adeiladu y mae gennym ddiddordeb mewn un ffeil yn unig - Adeiladu.cs

Rydym yn gwneud un prosiect ategyn gyda chrynhoad ar gyfer gwahanol fersiynau o Revit/AutoCAD

Agorwch y ffeil hon ac ysgrifennwch sgript i adeiladu'r prosiect ar gyfer pob ffurfweddiad. Wel, neu defnyddiwch fy sgript, y gallwch chi ei golygu i weddu i'ch anghenion:

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

Rydyn ni'n dychwelyd i ffenestr PowerShell ac yn ysgrifennu'r gorchymyn eto nuke (gallwch ysgrifennu'r gorchymyn nuke gan nodi'r angen Targed. Ond mae gennym ni un Targed, sy'n rhedeg yn ddiofyn). Ar ôl pwyso'r allwedd Enter, byddwn yn teimlo fel hacwyr go iawn, oherwydd, fel mewn ffilm, bydd ein prosiect yn cael ei ymgynnull yn awtomatig ar gyfer gwahanol ffurfweddiadau.

Gyda llaw, gallwch chi ddefnyddio PowerShell yn uniongyrchol o Visual Studio (dewislen "Gweld»->«Ffenestri eraill»->«Consol Rheolwr Pecyn"), ond bydd popeth mewn du a gwyn, nad yw'n gyfleus iawn.

Mae hyn yn cloi fy erthygl. Rwy'n siŵr y gallwch chi ddarganfod yr opsiwn ar gyfer AutoCAD eich hun. Rwy’n gobeithio y bydd y deunydd a gyflwynir yma yn dod o hyd i’w “gleientiaid”.

Diolch am eich sylw!

Ffynhonnell: hab.com

Ychwanegu sylw