Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Ҳангоми таҳияи плагинҳо барои барномаҳои CAD (дар сурати ман инҳо AutoCAD, Revit ва Renga мебошанд) бо мурури замон як мушкилот пайдо мешавад - версияҳои нави барномаҳо бароварда мешаванд, API-ро тағир медиҳанд ва версияҳои нави плагинҳо бояд сохта шаванд.

Вақте ки шумо танҳо як плагин доред ё шумо ҳоло ҳам дар ин масъала худомӯз ҳастед, шумо метавонед танҳо як нусхаи лоиҳаро созед, ҷойҳои заруриро дар он иваз кунед ва версияи нави плагинро ҷамъ кунед. Мувофики он тагйироти минбаъдаи кодекс боиси зиёд шудани харочоти мехнат мегардад.

Вақте ки шумо таҷриба ва дониш пайдо мекунед, шумо якчанд роҳҳои автоматикунонии ин равандро хоҳед ёфт. Ман ин роҳро тай кардам ва мехоҳам ба шумо бигӯям, ки ман бо чӣ кор кардам ва то чӣ андоза қулай аст.

Аввалан, биёед ба усуле назар кунем, ки маълум аст ва ман онро муддати тӯлонӣ истифода мебарам.

Пайвандҳо ба файлҳои лоиҳа

Ва барои он ки ҳама чиз содда, визуалӣ ва фаҳмо бошад, ман ҳама чизро бо истифода аз мисоли абстрактии таҳияи плагинҳо тавсиф мекунам.

Биёед Visual Studio-ро кушоем (ман версияи Community 2019 дорам. Ва ҳа - бо забони русӣ) ва ҳалли нав эҷод кунем. Биёед ба ӯ занг занем MySuperPluginForRevit

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Мо плагинро барои Revit барои версияҳои 2015-2020 месозем. Аз ин рӯ, биёед дар ҳалли лоиҳа лоиҳаи нав эҷод кунем (Китобхонаи Net Framework Class) ва онро даъват кунем MySuperPluginForRevit_2015

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Мо бояд истинодҳоро ба API Revit илова кунем. Албатта, мо метавонем истинодҳоро ба файлҳои маҳаллӣ илова кунем (мо бояд ҳама SDK-ҳои зарурӣ ё ҳама версияҳои Revit-ро насб кунем), аммо мо фавран роҳи дурустро пайравӣ мекунем ва бастаи NuGet-ро пайваст мекунем. Шумо метавонед якчанд бастаҳоро пайдо кунед, аммо ман худамро истифода хоҳам кард.

Пас аз пайваст кардани баста, тугмаи ростро клик кунед "мурожиат"ва ҷузъро интихоб кунед"Ҷойгир кардани packages.config ба PackageReference...»

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Агар ногаҳон дар ин лаҳза шумо ба воҳима сар кунед, зеро дар равзанаи хосиятҳои баста ягон ҷузъи муҳиме нахоҳад буд "Ба таври маҳаллӣ нусхабардорӣ кунед", ки мо бешубҳа бояд арзишро муқаррар кунем бардурӯғ, пас воҳима накунед - ба ҷузвдони лоиҳа равед, файлро бо тамдиди .csproj дар муҳаррири барои шумо қулай кушоед (ман Notepad++-ро истифода мебарам) ва дар он ҷо сабти бастаи моро пайдо кунед. Вай ҳоло чунин менамояд:

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

Ба он амвол илова кунед вақти иҷро. Ин чунин мешавад:

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

Ҳоло, ҳангоми сохтани лоиҳа, файлҳои баста ба ҷузвдони баромад нусхабардорӣ карда намешаванд.
Биёед минбаъд равем - биёед фавран тасаввур кунем, ки плагини мо чизе аз Revit API-ро истифода мебарад, ки бо мурури замон ҳангоми баровардани версияҳои нав тағир ёфтааст. Хуб, ё мо танҳо бояд чизеро дар код вобаста ба версияи Revit, ки барои он плагин сохта истодаем, тағир диҳем. Барои бартараф кардани чунин фарқиятҳо дар код, мо рамзҳои шартии компиляцияро истифода мебарем. Хусусиятҳои лоиҳаро кушоед, ба ҷадвали " гузаредАссамблея"ва дар майдон"Нишондиҳандаи тартибдиҳии шартӣ"биёед нависед R2015.

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Дар хотир доред, ки рамз бояд ҳам барои конфигуратсияҳои Debug ва Release илова карда шавад.

Хуб, вақте ки мо дар равзанаи хосиятҳо ҳастем, мо фавран ба ҷадвали " меравемАриза"ва дар майдон"Фазои номҳои пешфарз» суффиксро хориҷ кунед _2015то ки фазои номи мо универсалӣ бошад ва аз номи ассамблея мустақил бошад:

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Дар ҳолати ман, дар маҳсулоти ниҳоӣ, плагинҳои ҳама версияҳо дар як ҷузвдон ҷойгир карда мешаванд, аз ин рӯ номҳои маҷлиси ман бо суффикси форма боқӣ мемонанд _20хх. Аммо шумо инчунин метавонед пасвандро аз номи ассамблея хориҷ кунед, агар файлҳо бояд дар ҷузвдонҳои гуногун ҷойгир бошанд.

Биёед ба рамзи файл равем Class1.cs ва бо дарназардошти версияҳои гуногуни 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;
        }
    }
}

Ман дарҳол ҳамаи версияҳои Revit-ро дар боло версияи 2015 (ки ҳангоми навиштан дастрас буданд) ба назар гирифтам ва дарҳол мавҷудияти аломатҳои компиляцияи шартиро, ки бо истифода аз ҳамон шаблон сохта шудаанд, ба назар гирифтам.

Биёед ба нуқтаи муҳими асосӣ гузарем. Мо дар ҳалли худ лоиҳаи нав эҷод мекунем, танҳо барои версияи плагин барои Revit 2016. Мо ҳама амалҳои дар боло тавсифшударо такрор мекунем, мувофиқан рақами 2015-ро бо рақами 2016 иваз мекунем. Аммо файл Class1.cs аз лоиҳаи нав нест кунед.

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Файл бо рамзи зарурӣ - Class1.cs - мо онро аллакай дорем ва ба мо танҳо лозим аст, ки истиноди онро дар лоиҳаи нав ворид кунем. Ду роҳи ворид кардани пайвандҳо вуҷуд дорад:

  1. дароз - лоиҳаро бо тугмаи рост клик кунед ва "ро интихоб кунедилова кардан»->«Элементи мавҷуда", дар равзанаи кушодашуда, файли лозимиро пайдо кунед ва ба ҷои интихоб "илова кардан"интихоботро интихоб кунед"Ҳамчун пайвастшавӣ илова кунед»

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

  1. Кӯтоҳ – бевосита дар муҳаққиқи ҳалли масъала, файли дилхоҳро (ё ҳатто файлҳо, ҳатто тамоми ҷузвдонҳо) интихоб кунед ва ҳангоми пахши тугмаи Alt онро ба лоиҳаи нав кашед. Ҳангоми кашола кардан, шумо хоҳед дид, ки ҳангоми пахш кардани тугмаи Alt, курсори муш аз аломати плюс ба тирча иваз мешавад.
    ИПҶ - ИТТИҲОДИ ПОЧТАИ ҶАҲОНИ: Ман дар ин параграф каме иштибоҳ кардам - ​​барои интиқоли якчанд файл шумо бояд пахш кунед Shift + Alt!

Пас аз анҷом додани тартиб, мо дар лоиҳаи дуюм файл дорем Class1.cs бо нишонаи мувофиқ (тирчаи кабуд):

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Ҳангоми таҳрири код дар равзанаи муҳаррир, шумо инчунин метавонед интихоб кунед, ки дар кадом контексти лоиҳа нишон дода мешавад, ки код дар он нишон дода шавад, ки ин ба шумо имкон медиҳад, ки коди таҳриршавандаро дар зери аломатҳои гуногуни компиляцияи шартӣ бубинед:

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Мо ҳама лоиҳаҳои дигарро (2017-2020) бо истифода аз ин схема эҷод мекунем. Лайфхак - агар шумо файлҳоро дар Solution Explorer на аз лоиҳаи асосӣ, балки аз лоиҳае кашед, ки онҳо аллакай ҳамчун истинод ворид карда шудаанд, пас ба шумо лозим нест, ки тугмаи Alt-ро пахш кунед!

Варианти тавсифшуда то лаҳзаи илова кардани версияи нави плагин ё то лаҳзаи илова кардани файлҳои нав ба лоиҳа хеле хуб аст - ҳамаи ин хеле дилгиркунанда мешавад. Ва ба наздикӣ ман ногаҳон фаҳмидам, ки чӣ гуна ҳама чизро бо як лоиҳа ҳал кардан мумкин аст ва мо ба усули дуюм мегузарем

Сеҳри конфигуратсияҳо

Пас аз хондани ин ҷо, шумо метавонед хитоб кунед: "Чаро шумо усули якумро тавсиф кардед, агар мақола фавран дар бораи дуюм бошад?!" Ва ман ҳама чизро тавсиф кардам, то равшантар шавад, ки чаро ба мо рамзҳои тартибдиҳии шартӣ лозиманд ва лоиҳаҳои мо дар кадом ҷойҳо фарқ мекунанд. Ва акнун ба мо равшантар мешавад, ки кадом тафовутҳоро дар лоиҳаҳо мо бояд амалӣ кунем ва танҳо як лоиҳа боқӣ монад.

Ва барои равшантар шудани ҳама чиз, мо лоиҳаи нав намесозем, балки ба лоиҳаи ҳозираи худ, ки бо роҳи аввал сохта шудааст, тағирот ворид мекунем.

Ҳамин тавр, пеш аз ҳама, мо ҳама лоиҳаҳоро аз ҳал хориҷ мекунем, ба истиснои лоиҳаи асосӣ (бевосита файлҳоро дар бар мегирад). Онхое. лоиҳаҳо барои версияҳои 2016-2020. Папкаро бо ҳалли он кушоед ва ҷузвдонҳои ин лоиҳаҳоро дар он ҷо нест кунед.

Дар қарори мо як лоиҳа боқӣ мондааст - MySuperPluginForRevit_2015. Хусусиятҳои онро кушоед ва:

  1. Дар ҷадвали "Ариза"суффиксро аз номи маҷлис хориҷ кунед _2015 (чаро баъдтар маълум мешавад)
  2. Дар ҷадвали "Ассамблея» аломати тартибдиҳии шартиро хориҷ кунед R2015 аз майдони дахлдор

Эзоҳ: версияи охирини Visual Studio хато дорад - рамзҳои тартибдиҳии шартӣ дар равзанаи хосиятҳои лоиҳа намоиш дода намешаванд, гарчанде ки онҳо дастрасанд. Агар шумо ин хатогиро эҳсос кунед, пас шумо бояд онҳоро аз файли .csproj дастӣ нест кунед. Бо вуҷуди ин, мо бояд дар он кор кунем, бинобар ин хонед.

Номи лоиҳаро дар равзанаи Solution Explorer бо хориҷ кардани суффикс иваз кунед _2015 ва сипас лоиҳаро аз ҳалли он хориҷ кунед. Ин барои нигоҳ доштани тартибот ва эҳсосоти перфекционистҳо зарур аст! Мо папкаи ҳалли худро мекушоем, папкаи лоиҳаро дар он ҷо ба ҳамин тариқ тағир медиҳем ва лоиҳаро дубора ба ҳалли худ бор мекунем.

Менеҷери конфигуратсияро кушоед. конфигуратсияи ИМА озод кардан аслан, он лозим нест, бинобар ин мо онро нест мекунем. Мо конфигуратсияҳои навро бо номҳое эҷод мекунем, ки аллакай ба мо шиносанд R2015, R2016,..., R2020. Дар хотир доред, ки ба шумо лозим нест, ки танзимотро аз конфигуратсияҳои дигар нусхабардорӣ кунед ва ба шумо лозим нест, ки конфигуратсияҳои лоиҳа эҷод кунед:

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Ба ҷузвдони дорои лоиҳа равед ва файлро бо тамдиди .csproj дар муҳаррири барои шумо мувофиқ кушоед. Дар омади гап, шумо инчунин метавонед онро дар Visual Studio кушоед - шумо бояд лоиҳаро холӣ кунед ва пас ҷузъи дилхоҳ дар менюи контекстӣ хоҳад буд:

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Таҳрир дар Visual Studio ҳатто афзалтар аст, зеро муҳаррир ҳам мувофиқ мекунад ва ҳам дархост мекунад.

Дар файл мо элементҳоро мебинем PropertyGroup — дар боло чизи умумй ва баъд шартхо меояд. Ин унсурҳо хусусиятҳои лоиҳаро ҳангоми сохтани он муқаррар мекунанд. Элементи якум, ки бидуни шарт аст, хосиятҳои умумиро муқаррар мекунад ва унсурҳои дорои шартҳо, мувофиқан вобаста ба конфигуратсияҳо баъзе хосиятҳоро тағир медиҳанд.

Ба унсури умумӣ (аввал) гузаред PropertyGroup ва ба молу мулк нигаред Номи Ассамблея — чунин ном дорад анчуман ва бояд бе суффикс дошта бошем _2015. Агар суффикс мавҷуд бошад, онро хориҷ кунед.

Ҷустуҷӯи элемент бо шарт

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

Ба мо лозим нест - мо онро нест мекунем.

Элемент бо шарт

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

барои кор дар марҳилаи таҳияи код ва ислоҳи хатогиҳо лозим мешавад. Шумо метавонед хосиятҳои онро мувофиқи эҳтиёҷоти худ тағир диҳед - роҳҳои гуногуни баромадро таъин кунед, аломатҳои шартии компиляцияро тағир диҳед ва ғайра.

Акнун биёед унсурҳои нав эҷод кунем PropertyGroup барои конфигуратсияҳои мо. Дар ин унсурҳо ба мо лозим аст, ки танҳо чаҳор хосиятро муқаррар кунем:

  • OutputPath – папкаи баромад. Ман арзиши пешфарзро муқаррар кардам binR20xx
  • Муайян кардани константҳо – аломатҳои тартибдиҳии шартӣ. Арзиш бояд муайян карда шавад TRACE;R20хх
  • TargetFrameworkVersion - версияи платформа. Версияҳои гуногуни Revit API талаб мекунанд, ки платформаҳои гуногун муайян карда шаванд.
  • Номи Ассамблея – номи ассамблея (яъне номи файл). Шумо метавонед номи дақиқи маҷлисро нависед, аммо барои универсалӣ тавсия медиҳам, ки арзишро нависед $(AssemblyName)_20хх. Барои ин мо қаблан суффиксро аз номи маҷлис хориҷ кардем

Хусусияти муҳимтарини ҳамаи ин унсурҳо дар он аст, ки онҳо метавонанд ба лоиҳаҳои дигар бидуни тағир додани онҳо нусхабардорӣ карда шаванд. Баъдтар дар мақола ман тамоми мундариҷаи файли .csprojро замима хоҳам кард.

Хуб, мо хосиятҳои лоиҳаро фаҳмидем - ин мушкил нест. Аммо бо китобхонаҳои плагин (бастаҳои NuGet) чӣ бояд кард. Агар мо минбаъд назар кунем, мо мебинем, ки китобхонаҳои дохилшуда дар элементҳо муайян карда шудаанд Гурӯҳи ашё. Аммо бадбахтӣ - ин элемент шартҳоро ҳамчун элемент нодуруст коркард мекунад PropertyGroup. Шояд ин ҳатто як хатогии Visual Studio бошад, аммо агар шумо якчанд элементро муайян кунед Гурӯҳи ашё бо шартҳои конфигуратсия, ва дар дохили бастаҳои NuGet истинодҳои гуногун гузоред, пас вақте ки шумо конфигуратсияро тағир медиҳед, ҳама бастаҳои муайяншуда ба лоиҳа пайваст мешаванд.

Элемент ба ёрии мо меояд интихоб кардан, ки аз руи мантики мукаррарии мо кор мекунад агар-пас-дигар.

Истифодаи элемент интихоб кардан, мо бастаҳои гуногуни NuGet барои конфигуратсияҳои гуногун муқаррар мекунем:

Ҳама мундариҷа 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>

Лутфан қайд кунед, ки дар яке аз шартҳо ман ду конфигуратсияро тавассути Ё. Ҳамин тариқ, бастаи зарурӣ ҳангоми конфигуратсия пайваст карда мешавад Debug.

Ва дар ин ҷо мо қариб ҳама чизи комил дорем. Мо лоиҳаро дубора бор мекунем, конфигуратсияеро, ки ба мо лозим аст, фаъол месозем, банди "ро дар менюи контекстии ҳалли масъала даъват мекунем (на лоиҳа)Ҳама бастаҳои NuGet-ро барқарор кунед"ва мо мебинем, ки бастаҳои мо чӣ гуна тағир меёбанд.

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Ва дар ин марҳила ман ба як нуқтаи сарбаста расидам - ​​барои якбора ҷамъ овардани ҳамаи конфигуратсияҳо, мо метавонем маҷмӯи партияро истифода барем (меню "Ассамблея»->«Сохтани даста"), аммо ҳангоми иваз кардани конфигуратсияҳо, бастаҳо ба таври худкор барқарор карда намешаванд. Ва ҳангоми васл кардани лоиҳа, ин ҳам рӯй намедиҳад, гарчанде ки дар назария бояд ин тавр бошад. Ман бо истифода аз воситаҳои стандартӣ ҳалли ин мушкилотро наёфтам. Ва эҳтимоли зиёд ин як хатогии Visual Studio аст.

Бинобар ин барои монтажи партия карор дода шуд, ки системаи махсуси монтажкунии автоматй истифода бурда шавад Нӯҳ. Ман аслан инро намехостам, зеро ман фикр мекунам, ки ин аз ҷиҳати таҳияи плагинҳо аз ҳад зиёд аст, аммо дар айни замон ман ягон роҳи дигарро намебинам. Ва ба саволи "Чаро Nuke?" Ҷавоб оддӣ аст - мо онро дар кор истифода мебарем.

Пас, ба ҷузвдони ҳалли мо (на лоиҳа) гузаред, калидро пахш кунед Shift ва дар ҷои холии ҷузвдон бо тугмаи рост клик кунед - дар менюи контекстӣ ҷузъро интихоб кунед "Равзанаи PowerShell-ро дар ин ҷо кушоед".

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Агар шумо онро насб накарда бошед Нук, пас аввал фармонро нависед

dotnet tool install Nuke.GlobalTool –global

Акнун фармонро нависед Нук ва аз шумо хоҳиш карда мешавад, ки танзим кунед Нук барои лоиҳаи ҷорӣ. Ман намедонам, ки чӣ тавр инро бо забони русӣ дурусттар нависам - ба забони англисӣ навишта мешавад Could not found .nuke file. Оё шумо мехоҳед сохтмонро насб кунед? [ё/н]

Тугмаи Y-ро пахш кунед ва он гоҳ ҷузъҳои танзимоти мустақим пайдо мешаванд. Мо ба соддатарин варианти истифода ниёз дорем MSBuild, аз ин рӯ, мо тавре ки дар скриншот дода шудааст, ҷавоб медиҳем:

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Биёед ба Visual Studio равем, ки моро водор мекунад, ки ҳалли худро дубора бор кунем, зеро ба он лоиҳаи нав илова карда шудааст. Мо ҳалли худро дубора бор мекунем ва мебинем, ки мо лоиҳа дорем сохтан ки дар он мо танҳо ба як файл таваҷҷӯҳ дорем - Build.cs

Мо як лоиҳаи плагинро бо тартиб додани версияҳои гуногуни Revit/AutoCAD месозем

Ин файлро кушоед ва скрипт нависед, то лоиҳаро барои ҳама конфигуратсияҳо созед. Хуб, ё скрипти маро истифода баред, ки шумо метавонед онро мувофиқи эҳтиёҷоти худ таҳрир кунед:

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

Мо ба равзанаи PowerShell бармегардем ва фармонро дубора менависем Нук (шумо метавонед фармонро нависед Нук заруриро нишон дода Ҳадаф. Аммо мо якто дорем Ҳадаф, ки бо нобаёнӣ кор мекунад). Пас аз пахш кардани тугмаи Enter, мо худро ҳакерҳои воқеӣ ҳис хоҳем кард, зеро, мисли филм, лоиҳаи мо ба таври худкор барои конфигуратсияҳои гуногун ҷамъ карда мешавад.

Дар омади гап, шумо метавонед PowerShell-ро мустақиман аз Visual Studio истифода баред (меню "Бознигарии»->«Тирезаҳои дигар»->«Консол Менеҷери бастаҳо"), аммо ҳама чиз дар сиёҳ ва сафед хоҳад буд, ки он хеле қулай нест.

Ин мақолаи маро ба анҷом мерасонад. Ман боварӣ дорам, ки шумо метавонед худатон варианти AutoCAD-ро муайян кунед. Умедворам, ки маводе, ки дар ин ҷо оварда шудааст, “мизоҷон”-и худро пайдо мекунад.

Ташаккур барои таваҷҷӯҳатон!

Манбаъ: will.com

Илова Эзоҳ