Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

CAD proqramları üçün plaginlər hazırlayarkən (mənim vəziyyətimdə bunlar AutoCAD, Revit və Rengadır) zaman keçdikcə bir problem yaranır - proqramların yeni versiyaları buraxılır, onların API dəyişiklikləri və plaginlərin yeni versiyaları hazırlanmalıdır.

Yalnız bir plaginiz olduqda və ya bu məsələdə hələ də öz-özünə öyrədilmiş bir başlanğıc olduğunuzda, sadəcə layihənin bir nüsxəsini çıxara, lazımi yerləri dəyişdirə və plaqinin yeni versiyasını yığa bilərsiniz. Müvafiq olaraq, məcəlləyə sonrakı dəyişikliklər əmək xərclərinin dəfələrlə artmasına səbəb olacaqdır.

Təcrübə və bilik əldə etdikcə bu prosesi avtomatlaşdırmağın bir neçə yolunu tapacaqsınız. Mən bu yolu keçdim və sizə nə ilə nəticələndiyimi və bunun nə qədər rahat olduğunu söyləmək istəyirəm.

Əvvəlcə, açıq-aşkar olan və uzun müddət istifadə etdiyim bir üsula baxaq.

Layihə fayllarına keçidlər

Və hər şeyi sadə, vizual və başa düşülən etmək üçün, plagin inkişafının mücərrəd bir nümunəsindən istifadə edərək hər şeyi təsvir edəcəyəm.

Gəlin Visual Studio-nu açaq (Məndə Community 2019 versiyası var. Bəli - rus dilində) və yeni həll yaradaq. Gəlin ona zəng edək MySuperPluginForRevit

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

2015-2020 versiyaları üçün Revit üçün plagin hazırlayacağıq. Buna görə də, həlldə yeni bir layihə yaradaq (Net Framework Class Library) və onu çağıraq MySuperPluginForRevit_2015

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

Revit API-yə keçidlər əlavə etməliyik. Əlbəttə ki, biz yerli fayllara keçidlər əlavə edə bilərik (biz bütün lazımi SDK-ları və ya Revit-in bütün versiyalarını quraşdırmalı olacağıq), lakin biz dərhal düzgün yolu izləyəcəyik və NuGet paketini birləşdirəcəyik. Siz kifayət qədər çox paket tapa bilərsiniz, amma mən öz paketlərimi istifadə edəcəyəm.

Paketi birləşdirdikdən sonra, elementə sağ vurun "References"və elementi seçin"packages.config-i PackageReference-a köçürün...»

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

Birdən bu anda çaxnaşmaya başlasanız, çünki paket xassələri pəncərəsində heç bir vacib element olmayacaq "Yerli olaraq kopyalayın", biz mütləq dəyəri təyin etməliyik saxta, sonra panik etməyin - layihə ilə qovluğa gedin, sizin üçün əlverişli redaktorda .csproj uzantısı olan faylı açın (Mən Notepad++ istifadə edirəm) və orada paketimiz haqqında giriş tapın. O, indi belə görünür:

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

Ona əmlak əlavə edin icra müddəti. Bu belə çıxacaq:

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

İndi layihə qurarkən paketdəki fayllar çıxış qovluğuna kopyalanmayacaq.
Gəlin daha da irəli gedək - dərhal təsəvvür edək ki, plaginimiz yeni versiyalar çıxanda zamanla dəyişmiş Revit API-dən nəsə istifadə edəcək. Yaxşı, ya da sadəcə plagin hazırladığımız Revit versiyasından asılı olaraq kodda nəyisə dəyişdirməliyik. Koddakı bu cür fərqləri həll etmək üçün şərti tərtib simvollarından istifadə edəcəyik. Layihə xüsusiyyətlərini açın, "Məclis"və sahədə"Şərti tərtib notasiyası"Gəlin yazaq R2015.

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

Qeyd edək ki, simvol həm Debug, həm də Release konfiqurasiyaları üçün əlavə edilməlidir.

Yaxşı, biz xassələr pəncərəsində olarkən dərhal “ nişanına keçirikApp"və sahədə"Defolt ad sahəsi» şəkilçisini çıxarın _2015belə ki, ad məkanımız universal və montaj adından müstəqil olsun:

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

Mənim vəziyyətimdə, son məhsulda bütün versiyaların plaginləri bir qovluğa yerləşdirilir, buna görə montaj adlarım forma şəkilçisi ilə qalır _20хх. Lakin faylların müxtəlif qovluqlarda yerləşməsi nəzərdə tutulursa, siz həm də montaj adından şəkilçini silə bilərsiniz.

Fayl koduna keçək Class1.cs və Revit-in müxtəlif versiyalarını nəzərə alaraq orada bəzi kodu simulyasiya edin:

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

Mən dərhal Revit-in 2015-ci versiyadan yuxarı olan bütün versiyalarını (yazılan zaman mövcud idi) nəzərə aldım və dərhal eyni şablondan istifadə edərək yaradılan şərti tərtib simvollarının mövcudluğunu nəzərə aldım.

Gəlin əsas məqama keçək. Biz həllimizdə yalnız Revit 2016 üçün plaqinin versiyası üçün yeni bir layihə yaradırıq. 2015 nömrəsini 2016 nömrəsi ilə əvəz edərək, yuxarıda təsvir edilən bütün addımları təkrarlayırıq. Amma fayl Class1.cs yeni layihədən silin.

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

Lazımi kodla fayl - Class1.cs – bizdə artıq var və sadəcə yeni layihədə ona keçid daxil etməliyik. Bağlantıları daxil etməyin iki yolu var:

  1. Uzun - layihənin üzərinə sağ klikləyin və seçin "Əlavə etmək»->«Mövcud element", açılan pəncərədə tələb olunan faylı tapın və seçim əvəzinə "Əlavə etmək"seçini seçin"Bağlantı kimi əlavə edin»

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

  1. Qısa – birbaşa həll tədqiqatçısında istədiyiniz faylı (və ya hətta faylları, hətta bütöv qovluqları) seçin və Alt düyməsini basıb saxlayaraq onu yeni layihəyə sürükləyin. Sürüklədikcə Alt düyməsini sıxdığınız zaman siçan kursorunun artı işarəsindən oxa dəyişəcəyini görəcəksiniz.
    UPS: Bu paraqrafda bir az çaşqınlıq etdim - bir neçə faylı ötürmək üçün basıb saxlayın Shift + Alt!

Proseduru həyata keçirdikdən sonra ikinci layihədə bir faylımız olacaq Class1.cs müvafiq işarə ilə (mavi ox):

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

Redaktor pəncərəsində kodu redaktə edərkən, kodun hansı layihə kontekstində göstəriləcəyini də seçə bilərsiniz ki, bu da kodun müxtəlif şərti tərtib simvolları altında redaktə olunduğunu görməyə imkan verəcək:

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

Biz bu sxemdən istifadə edərək bütün digər layihələri (2017-2020) yaradırıq. Life-hack - Əgər siz Solution Explorer-də faylları əsas layihədən deyil, artıq keçid kimi daxil edilmiş layihədən sürükləyirsinizsə, onda Alt düyməsini basıb saxlamaq lazım deyil!

Təsvir edilən seçim, plaginin yeni versiyasını əlavə edənə qədər və ya layihəyə yeni fayllar əlavə olunana qədər olduqca yaxşıdır - bütün bunlar çox yorucu olur. Və bu yaxınlarda birdən birdən hər şeyi bir layihə ilə necə həll edəcəyimi başa düşdüm və biz ikinci üsula keçirik.

Konfiqurasiyaların sehri

Burada oxuyub bitirdikdən sonra siz deyə bilərsiniz: “Əgər məqalə dərhal ikincidən gedirsə, niyə birinci metodu təsvir etdiniz?!” Və mən şərti tərtib simvollarına niyə ehtiyacımız olduğunu və layihələrimizin hansı yerlərdə fərqləndiyini aydınlaşdırmaq üçün hər şeyi təsvir etdim. İndi bizə daha aydın olur ki, yalnız bir layihəni buraxaraq, layihələrdə hansı fərqləri həyata keçirməliyik.

Və hər şeyin daha aydın olması üçün biz yeni bir layihə yaratmayacağıq, lakin birinci şəkildə yaradılmış hazırkı layihəmizə dəyişikliklər edəcəyik.

Beləliklə, ilk növbədə, əsas (birbaşa faylları ehtiva edən) istisna olmaqla, bütün layihələri həlldən çıxarırıq. Bunlar. 2016-2020 versiyaları üçün layihələr. Həll ilə qovluğu açın və orada bu layihələrin qovluqlarını silin.

Qərarımızda bir layihəmiz qalıb - MySuperPluginForRevit_2015. Onun xassələrini açın və:

  1. Nişanda "App"məclis adından şəkilçini çıxarın _2015 (səbəbi sonra aydın olacaq)
  2. Nişanda "Məclis» şərti tərtib simvolunu çıxarın R2015 müvafiq sahədən

Qeyd: Visual Studio-nun ən son versiyasında səhv var - şərti tərtib simvolları mövcud olsa da, layihə xüsusiyyətləri pəncərəsində göstərilmir. Bu nasazlıqla qarşılaşsanız, onları .csproj faylından əl ilə silməlisiniz. Bununla belə, hələ də bunun üzərində işləməliyik, buna görə də oxuyun.

Suffiksi silməklə Solution Explorer pəncərəsində layihənin adını dəyişin _2015 və sonra layihəni həlldən çıxarın. Bu asayişi və mükəmməllikçilərin hisslərini qorumaq üçün lazımdır! Həllimizin qovluğunu açın, oradakı layihə qovluğunun adını eyni şəkildə dəyişdirin və layihəni yenidən həllə yükləyin.

Konfiqurasiya menecerini açın. ABŞ konfiqurasiyası Buraxın prinsipcə, lazım olmayacaq, ona görə də onu silirik. Bizə artıq tanış olan adlarla yeni konfiqurasiyalar yaradırıq R2015, R2016, ... R2020. Nəzərə alın ki, parametrləri digər konfiqurasiyalardan köçürməyə ehtiyac yoxdur və layihə konfiqurasiyaları yaratmağa ehtiyac yoxdur:

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

Layihənin olduğu qovluğa keçin və .csproj uzantılı faylı sizin üçün əlverişli redaktorda açın. Yeri gəlmişkən, onu Visual Studio-da da aça bilərsiniz - layihəni boşaltmalısınız və sonra istədiyiniz element kontekst menyusunda olacaq:

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

Visual Studio-da redaktə etmək daha məqsədəuyğundur, çünki redaktor həm hizalayır, həm də göstəriş verir.

Faylda biz elementləri görəcəyik Əmlak Qrupu – ən yuxarıda ümumi, sonra isə şərtlər gəlir. Bu elementlər layihənin tikintisi zamanı onun xüsusiyyətlərini təyin edir. Şərtsiz olan birinci element ümumi xassələri təyin edir, şərtləri olan elementlər isə müvafiq olaraq konfiqurasiyadan asılı olaraq bəzi xassələri dəyişir.

Ümumi (birinci) elementə keçin Əmlak Qrupu və əmlaka baxın AssemblyName – məclisin adı belədir və şəkilçisiz olmalıdır _2015. Əgər şəkilçi varsa, onu çıxarın.

Şərti olan elementin tapılması

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

Bizə lazım deyil - onu silirik.

Şərti olan element

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

kodun hazırlanması və sazlanması mərhələsində işləmək üçün lazım olacaq. Onun xassələrini ehtiyaclarınıza uyğun dəyişə bilərsiniz - müxtəlif çıxış yolları təyin edin, şərti tərtib simvollarını dəyişdirin və s.

İndi yeni elementlər yaradaq Əmlak Qrupu konfiqurasiyalarımız üçün. Bu elementlərdə sadəcə dörd xassə təyin etməliyik:

  • Çıxış yolu – çıxış qovluğu. Mən standart dəyəri təyin etdim binR20xx
  • Sabitləri müəyyənləşdirin – şərti tərtib simvolları. Dəyər göstərilməlidir TRACE;R20хх
  • TargetFrameworkVersion - platforma versiyası. Revit API-nin müxtəlif versiyaları fərqli platformaların göstərilməsini tələb edir.
  • AssemblyName – montaj adı (yəni fayl adı). Montajın dəqiq adını yaza bilərsiniz, lakin çox yönlülük üçün dəyəri yazmağı məsləhət görürəm $(AssemblyName)_20хх. Bunun üçün əvvəllər məclis adından şəkilçini çıxardıq

Bütün bu elementlərin ən mühüm xüsusiyyəti odur ki, onları heç dəyişmədən sadəcə başqa layihələrə köçürmək olar. Daha sonra məqalədə .csproj faylının bütün məzmununu əlavə edəcəyəm.

Yaxşı, biz layihənin xüsusiyyətlərini anladıq - bu çətin deyil. Ancaq plug-in kitabxanaları (NuGet paketləri) ilə nə etməli. Daha ətraflı baxsaq görərik ki, daxil edilmiş kitabxanalar elementlərdə göstərilib Maddə Qrupu. Ancaq uğursuzluq - bu element şərtləri element kimi səhv emal edir Əmlak Qrupu. Ola bilsin ki, bu hətta Visual Studio xətasıdır, ancaq bir neçə elementi qeyd etsəniz Maddə Qrupu konfiqurasiya şərtləri ilə daxil edin və NuGet paketlərinə müxtəlif keçidlər daxil edin, sonra konfiqurasiyanı dəyişdirdiyiniz zaman bütün göstərilən paketlər layihəyə qoşulur.

Element köməyimizə gəlir Seçmək, bizim adi məntiqimizə uyğun işləyir əgər-onda-başqa.

Elementdən istifadə Seçmək, biz müxtəlif konfiqurasiyalar üçün müxtəlif NuGet paketləri təyin edirik:

Bütün məzmun 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>

Nəzərə alın ki, şərtlərdən birində mən vasitəsilə iki konfiqurasiya qeyd etdim YA. Beləliklə, konfiqurasiya zamanı tələb olunan paket bağlanacaq Debug.

Və burada demək olar ki, hər şey mükəmməldir. Layihəni geri yükləyirik, ehtiyac duyduğumuz konfiqurasiyanı aktivləşdiririk, həllin kontekst menyusunda " elementinə zəng edirik (layihə deyil)Bütün NuGet paketlərini bərpa edin"və biz paketlərimizin necə dəyişdiyini görürük.

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

Və bu mərhələdə mən çıxılmaz nöqtəyə gəldim - bütün konfiqurasiyaları bir anda toplamaq üçün toplu montajdan istifadə edə bilərik (menyu "Məclis»->«Toplu qurmaq"), lakin konfiqurasiyaları dəyişdirərkən paketlər avtomatik bərpa edilmir. Layihəni yığarkən bu da baş vermir, baxmayaraq ki, nəzəri olaraq olmalıdır. Standart vasitələrdən istifadə edərək bu problemin həllini tapmadım. Və çox güman ki, bu da Visual Studio səhvidir.

Buna görə də, partiyanın yığılması üçün xüsusi avtomatlaşdırılmış montaj sistemindən istifadə etmək qərara alındı Nuke. Mən əslində bunu istəmirdim, çünki məncə, bu, plagin inkişafı baxımından həddindən artıqdır, lakin hazırda başqa bir həll görmürəm. Və “Niyə Nuke?” sualına. Cavab sadədir - işdə istifadə edirik.

Beləliklə, həllimizin qovluğuna gedin (layihə deyil), düyməni basıb saxlayın ÜstKrkt və qovluqdakı boş yerə sağ vurun - kontekst menyusunda elementi seçin "PowerShell pəncərəsini burada açın.

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

Əgər sizdə quraşdırılmayıbsa nuke, sonra əvvəlcə əmri yazın

dotnet tool install Nuke.GlobalTool –global

İndi əmri yazın nuke və sizdən konfiqurasiya tələb olunacaq nuke cari layihə üçün. Bunu rus dilində necə daha düzgün yazacağımı bilmirəm - ingiliscə yazılacaq .nuke faylını tapa bilmədim. Quraşdırma qurmaq istəyirsiniz? [y/n]

Y düyməsini basın və sonra birbaşa parametrlər olacaq. Bizə ən sadə variantdan istifadə etmək lazımdır MSBuild, buna görə ekran görüntüsündə olduğu kimi cavab veririk:

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

Gəlin Visual Studio-ya gedək, bu, bizə həlli yenidən yükləməyi təklif edəcək, çünki ona yeni bir layihə əlavə edilmişdir. Biz həlli yenidən yükləyirik və bir layihəmiz olduğunu görürük qurmaq yalnız bir faylla maraqlanırıq - Build.cs

Biz Revit / AutoCAD-in müxtəlif versiyaları üçün kompilyasiya ilə bir plagin layihəsi hazırlayırıq

Bu faylı açın və bütün konfiqurasiyalar üçün layihə qurmaq üçün skript yazın. Yaxşı, və ya ehtiyaclarınıza uyğun olaraq redaktə edə biləcəyiniz skriptimdən istifadə edin:

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 pəncərəsinə qayıdırıq və əmri yenidən yazırıq nuke (komanda yaza bilərsiniz nuke tələb olunduğunu göstərir Hədəf. Amma bizdə bir var Hədəf, standart olaraq işləyir). Enter düyməsini basdıqdan sonra özümüzü əsl hakerlər kimi hiss edəcəyik, çünki filmdəki kimi layihəmiz avtomatik olaraq müxtəlif konfiqurasiyalar üçün yığılacaq.

Yeri gəlmişkən, PowerShell-i birbaşa Visual Studio-dan istifadə edə bilərsiniz (menyu "Bax»->«Digər pəncərələr»->«Paket Meneceri Konsolu"), lakin hər şey qara və ağ rəngdə olacaq, bu çox rahat deyil.

Bununla mənim məqaləm yekunlaşır. Əminəm ki, AutoCAD üçün variantı özünüz anlaya bilərsiniz. Ümid edirəm ki, burada təqdim olunan material öz “müştərilərini” tapacaqdır.

Diqqətiniz üçün təşəkkür edirik!

Mənbə: www.habr.com

Добавить комментарий