Бид Revit/AutoCAD-ийн янз бүрийн хувилбаруудад зориулсан эмхэтгэлтэй нэг залгаас төсөл хийдэг

Бид Revit/AutoCAD-ийн янз бүрийн хувилбаруудад зориулсан эмхэтгэлтэй нэг залгаас төсөл хийдэг

CAD програмуудад зориулсан залгаасуудыг боловсруулахдаа (Миний хувьд Эдгээр нь AutoCAD, Revit болон Renga) цаг хугацаа өнгөрөхөд нэг асуудал гарч ирдэг - програмын шинэ хувилбарууд гарч, тэдгээрийн API өөрчлөлтүүд болон залгаасуудын шинэ хувилбаруудыг хийх шаардлагатай болдог.

Хэрэв танд зөвхөн нэг залгаас байгаа эсвэл энэ талаар өөрөө зааж сургасан эхлэгч хэвээр байгаа бол та төслийн хуулбарыг хийж, шаардлагатай газруудыг өөрчилж, залгаасын шинэ хувилбарыг угсарч болно. Үүний дагуу кодын дараагийн өөрчлөлтүүд нь хөдөлмөрийн зардлыг хэд хэдэн удаа нэмэгдүүлэх болно.

Туршлага, мэдлэг олж авснаар та энэ үйл явцыг автоматжуулах хэд хэдэн аргыг олох болно. Би энэ замаар алхсан бөгөөд би юунд хүрсэн, энэ нь ямар тохиромжтой болохыг танд хэлэхийг хүсч байна.

Эхлээд миний удаан хугацааны туршид хэрэглэж байсан тодорхой аргыг харцгаая.

Төслийн файлуудын холбоосууд

Бүх зүйлийг энгийн, ойлгомжтой, ойлгомжтой болгохын тулд би залгаасын хөгжүүлэлтийн хийсвэр жишээг ашиглан бүгдийг тайлбарлах болно.

Visual Studio-г нээцгээе (Надад Community 2019 хувилбар байна. Тэгээд тийм - Орос хэл дээр) шинэ шийдлийг бий болгоё. Түүнийг дуудъя MySuperPluginForRevit

Бид Revit/AutoCAD-ийн янз бүрийн хувилбаруудад зориулсан эмхэтгэлтэй нэг залгаас төсөл хийдэг

Бид 2015-2020 оны хувилбаруудад зориулж Revit-д зориулсан залгаас хийх болно. Тиймээс, шийдэлд (Net Framework Class Library) шинэ төсөл үүсгэж, түүнийг дуудъя MySuperPluginForRevit_2015

Бид Revit/AutoCAD-ийн янз бүрийн хувилбаруудад зориулсан эмхэтгэлтэй нэг залгаас төсөл хийдэг

Бид Revit API-д холбоос нэмэх хэрэгтэй. Мэдээжийн хэрэг, бид локал файлуудад холбоос нэмж болно (бид шаардлагатай бүх 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-ийн янз бүрийн хувилбаруудад зориулсан эмхэтгэлтэй нэг залгаас төсөл хийдэг

Дибаг хийх болон гаргах тохиргооны аль алинд нь тэмдэг нэмэх ёстойг анхаарна уу.

За, бид шинж чанаруудын цонхонд байх үед бид тэр даруй " таб руу очноПрограм"болон талбарт"Өгөгдмөл нэрийн орон зай» дагаварыг арилгах _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 товчийг дарахад хулганы курсор нэмэх тэмдэгээс сум болж өөрчлөгдөхийг харах болно.
    UPD: Би энэ догол мөрөнд бага зэрэг төөрөгдүүлсэн - хэд хэдэн файлыг шилжүүлэхийн тулд та удаан дарах хэрэгтэй Shift + Alt!

Процедурыг хийсний дараа бид хоёр дахь төсөлд файлтай болно Class1.cs харгалзах дүрс бүхий (цэнхэр сум):

Бид Revit/AutoCAD-ийн янз бүрийн хувилбаруудад зориулсан эмхэтгэлтэй нэг залгаас төсөл хийдэг

Редакторын цонхон дээрх кодыг засварлахдаа аль төслийн контекст кодыг харуулахыг сонгох боломжтой бөгөөд энэ нь янз бүрийн нөхцөлт эмхэтгэлийн тэмдэгтүүдийн дор засварлаж буй кодыг харах боломжийг танд олгоно.

Бид Revit/AutoCAD-ийн янз бүрийн хувилбаруудад зориулсан эмхэтгэлтэй нэг залгаас төсөл хийдэг

Бид энэ схемийг ашиглан бусад бүх төслийг (2017-2020) бүтээдэг. Lifehack - Хэрэв та Шийдэл 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 бидний тохиргооны хувьд. Эдгээр элементүүдэд бид зөвхөн дөрвөн шинж чанарыг тохируулах хэрэгтэй:

  • Гаралтын зам – гаралтын хавтас. Би анхдагч утгыг тохируулсан 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>

Нөхцөлүүдийн аль нэгэнд би хоёр тохиргоог дамжуулан зааж өгсөн болохыг анхаарна уу ЭСВЭЛ. Ингэснээр тохиргооны явцад шаардлагатай багцыг холбох болно Дебаг хийх.

Энд бид бараг бүх зүйл төгс байна. Бид төслийг буцааж ачаалж, шаардлагатай тохиргоог идэвхжүүлж, шийдлийн контекст цэсэнд "" гэсэн зүйлийг дуудна (төсөл биш)Бүх NuGet багцуудыг сэргээнэ үү"мөн манай багцууд хэрхэн өөрчлөгдөж байгааг бид харж байна.

Бид Revit/AutoCAD-ийн янз бүрийн хувилбаруудад зориулсан эмхэтгэлтэй нэг залгаас төсөл хийдэг

Энэ үе шатанд би мухардалд орлоо - бүх тохиргоог нэг дор цуглуулахын тулд бид багцын угсралтыг ашиглаж болно (цэс "Ассемблер»->«Багц бүтээх"), гэхдээ тохиргоог солих үед багцууд автоматаар сэргээгддэггүй. Төслийг угсарч байх үед энэ нь бас тохиолддоггүй, гэхдээ онолын хувьд ийм байх ёстой. Би стандарт арга хэрэгслийг ашиглан энэ асуудлын шийдлийг олж чадаагүй байна. Энэ нь бас Visual Studio алдаа байж магадгүй юм.

Тиймээс багцын угсралтын хувьд тусгай автоматжуулсан угсралтын системийг ашиглахаар шийдсэн Nuke. Би үүнийг үнэхээр хүсээгүй, учир нь залгаасын хөгжүүлэлтийн хүрээнд үүнийг хэт их зүйл гэж үзэж байгаа ч одоогоор надад өөр шийдэл харагдахгүй байна. Мөн "Яагаад Nuke?" Хариулт нь энгийн - бид үүнийг ажил дээрээ ашигладаг.

Тиймээс, бидний шийдлийн хавтас руу (төсөл биш) очиж, товчлуурыг удаан дарна уу Shift хавтас дахь хоосон зай дээр хулганы баруун товчийг дарж, контекст цэснээс " зүйлийг сонгоно уу.PowerShell цонхыг энд нээнэ үү".

Бид Revit/AutoCAD-ийн янз бүрийн хувилбаруудад зориулсан эмхэтгэлтэй нэг залгаас төсөл хийдэг

Хэрэв танд суулгаагүй бол цөм, дараа нь эхлээд команд бичнэ үү

dotnet tool install Nuke.GlobalTool –global

Одоо тушаалаа бич цөм мөн танаас тохируулахыг хүсэх болно цөм одоогийн төслийн хувьд. Үүнийг орос хэл дээр хэрхэн зөв бичихээ мэдэхгүй байна - англи хэл дээр .nuke файлыг олж чадаагүй гэж бичнэ. Та бүтэц тохируулахыг хүсч байна уу? [н/н]

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-ийн сонголтыг өөрөө олж чадна гэдэгт би итгэлтэй байна. Энд танилцуулсан материал "үйлчлүүлэгчээ" олно гэж найдаж байна.

Таны анхаарлын төвд баярлалаа!

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх