Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Nuair a bhios tu a’ leasachadh plugins airson tagraidhean CAD (anns a' chùis agam is iad sin AutoCAD, Revit agus Renga) thar ùine, tha aon dhuilgheadas a’ nochdadh - tha dreachan ùra de phrògraman air an leigeil ma sgaoil, na h-atharrachaidhean API aca agus feumar dreachan ùra de plugins.

Nuair nach eil agad ach aon plugan no gu bheil thu fhathast nad neach-tòiseachaidh fèin-ionnsaichte sa chùis seo, faodaidh tu dìreach leth-bhreac a dhèanamh den phròiseact, na h-àiteachan riatanach atharrachadh agus dreach ùr den plugan a chruinneachadh. Mar sin, bidh atharrachaidhean às deidh sin air a’ chòd a’ toirt a-steach àrdachadh ioma-mheudach ann an cosgaisean saothair.

Mar a gheibh thu eòlas agus eòlas, gheibh thu grunn dhòighean air a’ phròiseas seo a dhèanamh fèin-ghluasadach. Choisich mi an t-slighe seo agus tha mi airson innse dhut dè a chrìochnaich mi agus dè cho goireasach 'sa tha e.

An toiseach, leig dhuinn sùil a thoirt air modh a tha follaiseach agus a tha mi air a chleachdadh airson ùine mhòr.

Ceanglaichean gu faidhlichean pròiseict

Agus gus a h-uile dad a dhèanamh sìmplidh, lèirsinneach agus so-thuigsinn, bheir mi cunntas air a h-uile càil a’ cleachdadh eisimpleir eas-chruthach de leasachadh plugan.

Nach fosgail sinn Visual Studio (tha an dreach Coimhearsnachd 2019 agam. Agus tha - ann an Ruisis) agus cruthaich fuasgladh ùr. Canaidh sinn ris MySuperPlugin Airson Revit

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Bidh sinn a’ dèanamh plugan airson Revit airson dreachan 2015-2020. Mar sin, cruthaichidh sinn pròiseact ùr anns an fhuasgladh (Net Framework Class Library) agus canaidh sinn e MySuperPlugin Airson Revit_2015

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Feumaidh sinn ceanglaichean a chur ris an Revit API. Gu dearbh, is urrainn dhuinn ceanglaichean a chuir ri faidhlichean ionadail (feumaidh sinn na SDKan riatanach no gach dreach de Revit a chuir a-steach), ach leanaidh sinn an t-slighe cheart sa bhad agus ceangail sinn am pasgan NuGet. Gheibh thu grunn phasganan, ach cleachdaidh mi mo chuid fhìn.

Às deidh dhut am pasgan a cheangal, cliog deas air an rud “iomraidhean" agus tagh an rud"Gluais pacaidean.config gu PackageReference...»

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Ma thòisicheas tu gu h-obann aig an ìre seo a’ clisgeadh, oir ann an uinneag feartan pacaid cha bhi nì cudromach ann “Dèan lethbhreac gu h-ionadail", a dh'fheumas sinn gu cinnteach a shuidheachadh chun luach ceàrr, an uairsin na gabh dragh - rachaibh chun phasgan leis a’ phròiseact, fosgail am faidhle leis an leudachadh .csproj ann an deasaiche a tha iomchaidh dhut (bidh mi a’ cleachdadh Notepad ++) agus lorg inntrig mun phasgan againn an sin. Tha i a’ coimhead mar seo a-nis:

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

Cuir seilbh ris àm ruith. Tionndaidhidh e a-mach mar seo:

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

A-nis, nuair a bhios tu a’ togail pròiseact, cha tèid faidhlichean bhon phasgan a chopaigeadh chun phasgan toraidh.
Rachamaid nas fhaide - smaoinichidh sinn sa bhad gun cleachd am plugan againn rudeigin bhon Revit API, a tha air atharrachadh thar ùine nuair a chaidh dreachan ùra fhoillseachadh. Uill, no feumaidh sinn dìreach rudeigin atharrachadh sa chòd a rèir an dreach de Revit airson a bheil sinn a’ dèanamh am plugan. Gus an leithid de dh’ eadar-dhealachaidhean ann an còd fhuasgladh, cleachdaidh sinn samhlaidhean cruinneachaidh cumhach. Fosgail feartan a’ phròiseict, rachaibh gu “ tabTionndadh"agus anns an raon"Comharrachadh cruinneachaidh cumhach"sgrìobhamaid R2015.

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Thoir an aire gum feumar an samhla a chuir ris an dà chuid airson na rèiteachaidhean Debug and Release.

Uill, fhad ‘s a tha sinn ann an uinneag nan togalaichean, thèid sinn sa bhad chun“ tabIarrtas"agus anns an raon"Àite-ainm bunaiteach» thoir air falbh an iar-leasachan _2015gus am bi an t-ainm-àite againn uile-choitcheann agus neo-eisimeileach bho ainm a’ cho-chruinneachaidh:

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Anns a 'chùis agam, anns an toradh mu dheireadh, tha plugins de gach dreach air an cur ann an aon phasgan, agus mar sin tha na h-ainmean cruinneachaidh agam fhathast le iar-leasachan na foirm _20хх. Ach faodaidh tu cuideachd an iar-leasachan a thoirt air falbh bho ainm an t-seanaidh ma tha còir aig na faidhlichean a bhith suidhichte ann am pasganan eadar-dhealaichte.

Rachamaid gu còd an fhaidhle Clas1.cs agus atharrais air còd an sin, a’ toirt aire do dhreachan eadar-dhealaichte de 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;
        }
    }
}

Thug mi a-steach sa bhad a h-uile dreach de Revit os cionn dreach 2015 (a bha rim faighinn aig àm sgrìobhaidh) agus sa bhad thug mi aire do làthaireachd samhlaidhean cruinneachaidh cumhach, a tha air an cruthachadh leis an aon teamplaid.

Gluaisidh sinn air adhart chun phrìomh shealladh. Bidh sinn a 'cruthachadh pròiseact ùr nar fuasgladh, a-mhàin airson an dreach den plugan airson Revit 2016. Bidh sinn a 'toirt a-rithist a h-uile ceum a chaidh a mhìneachadh gu h-àrd, fa leth, a' cur an àite an àireamh 2015 leis an àireamh 2016. Ach am faidhle Clas1.cs toirt air falbh bhon phròiseact ùr.

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Faidhle leis a’ chòd a tha a dhìth - Clas1.cs - tha e againn mu thràth agus chan fheum sinn ach ceangal a chuir ris ann am pròiseact ùr. Tha dà dhòigh air ceanglaichean a chuir a-steach:

  1. Fada - cliog deas air a’ phròiseact agus tagh “Cuir»->«Eileamaid a th' ann mar-thà", san uinneag a tha a' fosgladh, lorg am faidhle a tha a dhìth agus an àite an roghainn"Cuir"Tagh an roghainn"Cuir ris mar cheangal»

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

  1. Goirid - gu dìreach anns an rannsachair fuasglaidh, tagh am faidhle a tha thu ag iarraidh (no eadhon faidhlichean, no eadhon pasganan slàn) agus slaod e a-steach do phròiseact ùr fhad ‘s a chumas tu sìos an iuchair Alt. Mar a bhios tu a’ slaodadh, chì thu nuair a phutas tu air an iuchair Alt, gun atharraich cursair na luchaige bho shoidhne plus gu saighead.
    ÙRACHADH: Rinn mi beagan troimh-chèile sa pharagraf seo - gus grunn fhaidhlichean a ghluasad a bu chòir dhut a chumail sìos Shift + Alt!

Às deidh an dòigh-obrach a dhèanamh, bidh faidhle againn san dàrna pròiseact Clas1.cs leis an ìomhaigh fhreagarrach (saighead ghorm):

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Nuair a bhios tu a’ deasachadh còd ann an uinneag an neach-deasachaidh, faodaidh tu cuideachd taghadh dè an co-theacs pròiseict anns am bu chòir an còd a thaisbeanadh, a leigeas leat an còd fhaicinn ga dheasachadh fo dhiofar shamhlaidhean cruinneachaidh cumhach:

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Bidh sinn a’ cruthachadh a h-uile pròiseact eile (2017-2020) a’ cleachdadh an sgeama seo. Lifehack - ma shlaodas tu faidhlichean anns an Solution Explorer chan ann bhon phròiseact bunaiteach, ach bhon phròiseact far a bheil iad air an cur a-steach mar cheangal mar-thà, cha leig thu leas an iuchair Alt a chumail sìos!

Tha an roghainn a chaidh a mhìneachadh gu math math gus an tèid dreach ùr den plugan a chuir ris no gus an tèid faidhlichean ùra a chuir ris a ’phròiseact - bidh seo uile a’ fàs gu math tedious. Agus o chionn ghoirid thuig mi gu h-obann gu h-obann mar a rèitich mi a h-uile càil le aon phròiseact agus tha sinn a 'gluasad air adhart chun an dàrna dòigh

Draoidheachd nan rèiteachaidhean

Às deidh dhut crìoch a chuir air leughadh an seo, faodaidh tu glaodhadh, “Carson a thug thu cunntas air a’ chiad dhòigh, ma tha an artaigil sa bhad mun dàrna fear?!” Agus thug mi cunntas air a h-uile càil gus a dhèanamh nas soilleire carson a tha feum againn air samhlaidhean cruinneachaidh cumhach agus anns na h-àiteachan a tha na pròiseactan againn eadar-dhealaichte. Agus a-nis bidh e nas soilleire dhuinn dè dìreach eadar-dhealachaidhean ann am pròiseactan a dh'fheumas sinn a chur an gnìomh, a 'fàgail ach aon phròiseact.

Agus gus a h-uile càil a dhèanamh nas follaisiche, cha chruthaich sinn pròiseact ùr, ach nì sinn atharrachaidhean air a’ phròiseact gnàthach againn a chaidh a chruthachadh sa chiad dòigh.

Mar sin, an toiseach, bidh sinn a 'toirt air falbh a h-uile pròiseact bhon fhuasgladh ach a-mhàin am prìomh fhear (anns a bheil na faidhlichean gu dìreach). An fheadhainn sin. pròiseactan airson dreachan 2016-2020. Fosgail am pasgan leis an fhuasgladh agus sguab às na pasganan de na pròiseactan sin an sin.

Tha aon phròiseact againn air fhàgail nar co-dhùnadh - MySuperPlugin Airson Revit_2015. Fosgail na feartan aige agus:

  1. Air an taba “Iarrtas“Thoir air falbh an iar-leasachan bho ainm a’ cho-chruinneachaidh _2015 (bidh e soilleir carson nas fhaide air adhart)
  2. Air an taba “Tionndadh» thoir air falbh an samhla cruinneachaidh cumhach R2015 bhon raon iomchaidh

Thoir an aire: tha bug anns an dreach as ùire de Visual Studio - chan eil samhlaidhean cruinneachaidh cumhach air an taisbeanadh ann an uinneag feartan a’ phròiseict, ged a tha iad rim faighinn. Ma gheibh thu eòlas air an glitch seo, feumaidh tu an toirt air falbh le làimh bhon fhaidhle .csproj. Ach, feumaidh sinn a bhith ag obair ann fhathast, mar sin leugh air adhart.

Ath-ainmich am pròiseact ann an uinneag Solution Explorer le bhith a’ toirt air falbh an iar-leasachan _2015 agus an uairsin cuir às don phròiseact bhon fhuasgladh. Tha seo riatanach gus òrdugh agus faireachdainnean luchd-foirfeachd a chumail suas! Bidh sinn a 'fosgladh pasgan an fhuasglaidh againn, ag ath-ainmeachadh pasgan a' phròiseict an sin san aon dòigh agus a 'luchdachadh a' phròiseict air ais dhan fhuasgladh.

Fosgail am manaidsear rèiteachaidh. rèiteachadh na SA release ann am prionnsabal, cha bhith feum air, agus mar sin sguabaidh sinn às e. Bidh sinn a’ cruthachadh rèiteachaidhean ùra le ainmean air a bheil sinn eòlach mu thràth R2015, R2016, ..., R2020. Thoir an aire nach fheum thu roghainnean a chopaigeadh bho rèiteachaidhean eile agus chan fheum thu rèiteachadh pròiseict a chruthachadh:

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Rach don phasgan leis a 'phròiseact agus fosgail am faidhle leis an leudachadh .csproj ann an neach-deasachaidh a tha freagarrach dhut. Air an t-slighe, faodaidh tu cuideachd fhosgladh ann an Visual Studio - feumaidh tu am pròiseact a luchdachadh sìos agus an uairsin bidh an rud a tha thu ag iarraidh anns a ’chlàr co-theacsa:

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Tha e eadhon nas fheàrr deasachadh ann an Visual Studio, leis gu bheil an deasaiche an dà chuid a’ co-thaobhadh agus a’ brosnachadh.

Anns an fhaidhle chì sinn na h-eileamaidean Buidheann Seilbh - aig a’ mhullach tha am fear coitcheann, agus an uairsin thig na suidheachaidhean. Bidh na h-eileamaidean sin a 'suidheachadh feartan a' phròiseict nuair a thèid a thogail. Tha a 'chiad eileamaid, a tha gun chumhachan, a' suidheachadh feartan coitcheann, agus eileamaidean le cumhaichean, a rèir sin, ag atharrachadh cuid de fheartan a rèir an rèiteachaidh.

Rach don eileamaid chumanta (ciad). Buidheann Seilbh agus coimhead air an oighreachd Ainm-tionail – seo ainm a’ cho-chruinneachaidh agus bu chòir dhuinn a bhith gun iar-leasachan _2015. Ma tha iar-leasachan ann, thoir air falbh e.

Lorg eileamaid le staid

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

Chan eil feum againn air - sguabaidh sinn às e.

Eileamaid le staid

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

bidh feum air a bhith ag obair aig ìre leasachadh còd agus debugging. Faodaidh tu na feartan aige atharrachadh gus freagairt air na feumalachdan agad - suidhich diofar shlighean toraidh, atharraich samhlaidhean cruinneachaidh cumhach, msaa.

A-nis cruthaichidh sinn eileamaidean ùra Buidheann Seilbh airson ar rèiteachaidhean. Anns na h-eileamaidean sin chan fheum sinn ach ceithir feartan a shuidheachadh:

  • Slighe Toraidh - pasgan toraidh. Shuidhich mi an luach bunaiteach binR20xx
  • Mìnich Constants - samhlaidhean cruinneachaidh cumhach. Bu chòir an luach a shònrachadh TRACE; R20хх
  • TargetFrameworkVersion - dreach àrd-ùrlar. Feumaidh diofar dhreachan den Revit API diofar àrd-ùrlaran a shònrachadh.
  • Ainm-tionail - ainm cruinneachaidh (ie ainm faidhle). Faodaidh tu dearbh ainm a’ cho-chruinneachaidh a sgrìobhadh, ach airson sùbailteachd tha mi a’ moladh an luach a sgrìobhadh $(Ainm Seanaidh)_20хх. Gus seo a dhèanamh, thug sinn air falbh an iar-leasachan bho ainm a’ cho-chruinneachaidh roimhe seo

Is e am feart as cudromaiche de na h-eileamaidean sin uile gum faod iad a bhith air an lethbhreacadh gu pròiseactan eile gun atharrachadh idir. Nas fhaide air adhart san artaigil ceangailidh mi a h-uile susbaint anns an fhaidhle .csproj.

Gu ceart, tha sinn air faighinn a-mach feartan a 'phròiseict - chan eil e doirbh. Ach dè a nì thu le leabharlannan plug-in (pasgan NuGet). Ma choimheadas sinn nas fhaide, chì sinn gu bheil na leabharlannan a tha air an toirt a-steach air an sònrachadh anns na h-eileamaidean Buidheann Nì. Ach droch fhortan - bidh an eileamaid seo gu ceàrr a’ làimhseachadh nan suidheachaidhean mar eileamaid Buidheann Seilbh. Is dòcha gur e eadhon glitch Studio Studio a tha seo, ach ma shònraicheas tu grunn eileamaidean Buidheann Nì le cumhachan rèiteachaidh, agus cuir a-steach ceanglaichean eadar-dhealaichte ri pacaidean NuGet a-staigh, an uairsin nuair a dh’ atharraicheas tu an rèiteachadh, tha a h-uile pasgan ainmichte ceangailte ris a’ phròiseact.

Tha an eileamaid a 'tighinn gu ar taic Tagh, a tha ag obair a rèir ar loidsig àbhaisteach ma tha - an uairsin-eile.

A 'cleachdadh eileamaid Tagh, shuidhich sinn diofar phasgan NuGet airson diofar rèiteachaidhean:

A h-uile susbaint 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>

Thoir an aire, ann an aon de na cumhaichean, gun do shònraich mi dà rèiteachadh tro NO. San dòigh seo bidh am pasgan a tha a dhìth air a cheangal rè rèiteachadh Debug.

Agus an seo tha cha mhòr a h-uile dad foirfe againn. Bidh sinn a ’luchdachadh a’ phròiseict air ais, a ’comasachadh an rèiteachadh a dh’ fheumas sinn, a ’gairm an rud" ann an clàr co-theacsa an fhuasglaidh (chan e am pròiseact)Thoir air ais a h-uile pasgan NuGet“agus chì sinn mar a bhios na pacaidean againn ag atharrachadh.

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Agus aig an ìre seo thàinig mi gu crìch - gus a h-uile rèiteachadh a chruinneachadh aig an aon àm, b 'urrainn dhuinn cruinneachadh baidse a chleachdadh (clàr-taice "Tionndadh»->«Togail batch"), ach nuair a dh'atharraicheas tu rèiteachaidhean, cha tèid pacaidean ath-nuadhachadh gu fèin-obrachail. Agus nuair a bhios tu a 'cruinneachadh a' phròiseict, chan eil seo a 'tachairt cuideachd, ged, ann an teòiridh, bu chòir dha. Chan eil mi air fuasgladh fhaighinn air an duilgheadas seo a’ cleachdadh dhòighean àbhaisteach. Agus is coltaiche gur e bug Visual Studio a tha seo cuideachd.

Mar sin, airson co-chruinneachadh baidse, chaidh co-dhùnadh siostam cruinneachaidh fèin-ghluasadach sònraichte a chleachdadh Nuke. Gu dearbh cha robh mi ag iarraidh seo, oir tha mi den bheachd gu bheil e cus taobh a-staigh frèam leasachadh plugan, ach aig an àm seo chan eil mi a’ faicinn fuasgladh sam bith eile. Agus ris a 'cheist "Carson Nuke?" Tha am freagairt sìmplidh - bidh sinn ga chleachdadh aig an obair.

Mar sin, rachaibh gu pasgan an fhuasglaidh againn (chan e am pròiseact), cùm sìos an iuchair Shift agus cliog deas air àite falamh sa phasgan - anns a’ chlàr co-theacsa tagh an rud “Fosgail uinneag PowerShell an seo".

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Mura h-eil thu air a stàladh Nuke, an uairsin sgrìobh an àithne an toiseach

dotnet tool install Nuke.GlobalTool –global

A-nis sgrìobh an àithne Nuke agus thèid iarraidh ort a rèiteachadh Nuke airson a’ phròiseict làithreach. Chan eil fios agam ciamar a sgrìobhas mi seo nas ceart ann an Ruisis - ann am Beurla thèid a sgrìobhadh Could not find .nuke file. A bheil thu airson togalach a stèidheachadh? [y/n]

Brùth air an iuchair Y agus an uairsin bidh nithean roghainnean dìreach ann. Feumaidh sinn an roghainn as sìmplidh a chleachdadh MSBuild, mar sin freagraidh sinn mar a tha san dealbh-sgrìn:

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Rachamaid gu Visual Studio, a bheir oirnn am fuasgladh ath-luchdachadh, leis gu bheil pròiseact ùr air a chur ris. Bidh sinn ag ath-luchdachadh am fuasgladh agus a’ faicinn gu bheil pròiseact againn togail anns nach eil ùidh againn ach ann an aon fhaidhle - Tog.cs

Bidh sinn a’ dèanamh aon phròiseact plugan le cruinneachadh airson diofar dhreachan de Revit/AutoCAD

Fosgail am faidhle seo agus sgrìobh sgriobt gus am pròiseact a thogail airson a h-uile rèiteachadh. Uill, neo cleachd an sgriobt agam, as urrainn dhut a dheasachadh gus freagairt air na feumalachdan agad:

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

Bidh sinn a’ tilleadh gu uinneag PowerShell agus a’ sgrìobhadh an àithne a-rithist Nuke (faodaidh tu an àithne a sgrìobhadh Nuke a’ nochdadh an fheum targaid. Ach tha aon againn targaid, a tha a 'ruith gu bunaiteach). Às deidh dhuinn an iuchair Enter a bhrùthadh, bidh sinn a’ faireachdainn mar fhìor hackers, oir, mar ann am film, thèid ar pròiseact a chruinneachadh gu fèin-ghluasadach airson diofar rèiteachaidhean.

Co-dhiù, faodaidh tu PowerShell a chleachdadh gu dìreach bho Visual Studio (clàr-taice "sealladh»->«Uinneagan eile»->«Console Manaidsear Pacaid"), ach bidh a h-uile dad ann an dubh is geal, rud nach eil gu math goireasach.

Tha seo a’ crìochnachadh an artaigil agam. Tha mi cinnteach gum faigh thu a-mach an roghainn airson AutoCAD thu fhèin. Tha mi an dòchas gun lorg an stuth a tha air a thaisbeanadh an seo an “luchd-dèiligidh”.

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

Source: www.habr.com

Cuir beachd ann