IzstrÄdÄjot spraudÅus CAD lietojumprogrammÄm (
Ja jums ir tikai viens spraudnis vai jÅ«s joprojÄm esat autodidakts iesÄcÄjs Å”ajÄ jautÄjumÄ, varat vienkÄrÅ”i izveidot projekta kopiju, mainÄ«t tajÄ nepiecieÅ”amÄs vietas un salikt jaunu spraudÅa versiju. AttiecÄ«gi turpmÄkÄs koda izmaiÅas radÄ«s daudzkÄrtÄju darbaspÄka izmaksu pieaugumu.
IegÅ«stot pieredzi un zinÄÅ”anas, jÅ«s atradÄ«siet vairÄkus veidus, kÄ automatizÄt Å”o procesu. Es gÄju Å”o ceļu un vÄlos pastÄstÄ«t, ar ko es beidzu un cik tas ir Ärti.
Vispirms apskatīsim metodi, kas ir acīmredzama un kuru esmu izmantojis jau ilgu laiku.
Saites uz projektu failiem
Un, lai viss bÅ«tu vienkÄrÅ”i, vizuÄli un saprotami, es visu aprakstÄ«Å”u, izmantojot abstraktu spraudÅa izstrÄdes piemÄru.
Atveram Visual Studio (man ir Community 2019 versija. Un jÄ - krievu valodÄ) un izveidosim jaunu risinÄjumu. Sauksim viÅu MySuperPluginForRevit
MÄs izveidosim Revit spraudni 2015.ā2020. gada versijÄm. TÄpÄc izveidosim jaunu projektu risinÄjumÄ (Net Framework Class Library) un nosauksim to MySuperPluginForRevit_2015
Mums ir jÄpievieno saites uz Revit API. Protams, mÄs varam pievienot saites uz vietÄjiem failiem (mums bÅ«s jÄinstalÄ visi nepiecieÅ”amie SDK vai visas Revit versijas), taÄu mÄs nekavÄjoties ejam pa pareizo ceļu un savienosim NuGet pakotni. JÅ«s varat atrast diezgan daudz iepakojumu, bet es izmantoÅ”u savu.
PÄc paketes pievienoÅ”anas ar peles labo pogu noklikŔķiniet uz vienuma "atsauces"un atlasiet vienumu"PÄrvietot packages.config uz PackageReference...Ā»
Ja pÄkÅ”Åi Å”ajÄ brÄ«dÄ« jÅ«s sÄkat krist panikÄ, jo pakotnes rekvizÄ«tu logÄ nebÅ«s svarÄ«gas preces "KopÄt lokÄli", kas mums noteikti ir jÄiestata uz vÄrtÄ«bu nepatiess, tad nekrÄ«ti panikÄ ā dodies uz mapi ar projektu, atver failu ar paplaÅ”inÄjumu .csproj sev ÄrtÄ redaktorÄ (es izmantoju Notepad++) un atrodi tur ierakstu par mÅ«su pakotni. ViÅa tagad izskatÄs Å”Ädi:
<PackageReference Include="ModPlus.Revit.API.2015">
<Version>1.0.0</Version>
</PackageReference>
Pievienojiet tam Ä«paÅ”umu izpildlaiks. Tas izrÄdÄ«sies Å”Ädi:
<PackageReference Include="ModPlus.Revit.API.2015">
<Version>1.0.0</Version>
<ExcludeAssets>runtime</ExcludeAssets>
</PackageReference>
Tagad, veidojot projektu, faili no pakotnes netiks kopÄti izvades mapÄ.
Dosimies tÄlÄk ā uzreiz iedomÄsimies, ka mÅ«su spraudnis izmantos kaut ko no Revit API, kas laika gaitÄ ir mainÄ«jies, izlaižot jaunas versijas. Vai arÄ« mums vienkÄrÅ”i kaut kas jÄmaina kodÄ atkarÄ«bÄ no Revit versijas, kurai mÄs veidojam spraudni. Lai atrisinÄtu Å”Ädas koda atŔķirÄ«bas, mÄs izmantosim nosacÄ«jumu kompilÄcijas simbolus. Atveriet projekta rekvizÄ«tus, dodieties uz cilni āMontÄža"un laukÄ"NosacÄ«tÄ kompilÄcijas apzÄ«mÄjums"rakstÄ«sim R2015.
Å emiet vÄrÄ, ka simbols ir jÄpievieno gan atkļūdoÅ”anas, gan izlaiÅ”anas konfigurÄcijÄm.
KamÄr atrodamies rekvizÄ«tu logÄ, mÄs nekavÄjoties pÄrejam uz cilni āPieteikums"un laukÄ"NoklusÄjuma nosaukumvietaĀ» noÅemiet piedÄkli _2015lai mÅ«su nosaukumvieta bÅ«tu universÄla un neatkarÄ«ga no montÄžas nosaukuma:
ManÄ gadÄ«jumÄ galaproduktÄ visu versiju spraudÅi tiek ievietoti vienÄ mapÄ, tÄpÄc mani montÄžas nosaukumi paliek ar formas sufiksu _20Ń Ń . Bet jÅ«s varat arÄ« noÅemt sufiksu no montÄžas nosaukuma, ja faili atrodas dažÄdÄs mapÄs.
Dosimies uz faila kodu Klase1.cs un simulÄt tur kÄdu kodu, Åemot vÄrÄ dažÄdas Revit versijas:
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;
}
}
}
Es nekavÄjoties ÅÄmu vÄrÄ visas Revit versijas virs 2015. gada versijas (kas bija pieejamas rakstÄ«Å”anas laikÄ) un nekavÄjoties ÅÄmu vÄrÄ nosacÄ«jumu kompilÄcijas simbolu klÄtbÅ«tni, kas tiek veidoti, izmantojot to paÅ”u veidni.
PÄriesim pie galvenÄ akcenta. MÄs savÄ risinÄjumÄ izveidojam jaunu projektu, tikai spraudÅa versijai Revit 2016. AtkÄrtojam visas iepriekÅ” aprakstÄ«tÄs darbÄ«bas, attiecÄ«gi aizstÄjot numuru 2015 ar numuru 2016. Bet fails Klase1.cs dzÄst no jaunÄ projekta.
Fails ar nepiecieÅ”amo kodu - Klase1.cs ā mums tas jau ir, un mums tikai jÄievieto saite uz to jaunÄ projektÄ. Ir divi veidi, kÄ ievietot saites:
- GarÅ” - ar peles labo pogu noklikŔķiniet uz projekta un atlasiet āPievienotĀ»->Ā«EsoÅ”ais elements", atvÄrtajÄ logÄ atrodiet vajadzÄ«go failu un opcijas vietÄPievienot"izvÄlies opciju"Pievienot kÄ savienojumuĀ»
- ÄŖss ā tieÅ”i risinÄjumu pÄrlÅ«kÄ atlasiet vajadzÄ«go failu (vai pat failus, vai pat veselas mapes) un velciet to jaunÄ projektÄ, turot nospiestu taustiÅu Alt. Velkot, jÅ«s redzÄsit, ka, nospiežot taustiÅu Alt, peles kursors tiks mainÄ«ts no pluszÄ«mes uz bultiÅu.
UPD: Es radÄ«ju nelielu neskaidrÄ«bu Å”ajÄ rindkopÄ - lai pÄrsÅ«tÄ«tu vairÄkus failus, jums vajadzÄtu turÄt nospiestu Shift + Alt!
PÄc procedÅ«ras veikÅ”anas mums bÅ«s fails otrajÄ projektÄ Klase1.cs ar atbilstoÅ”o ikonu (zilÄ bultiÅa):
RediÄ£Äjot kodu redaktora logÄ, varat arÄ« izvÄlÄties, kurÄ projekta kontekstÄ kodu rÄdÄ«t, kas ļaus redzÄt rediÄ£Äjamo kodu zem dažÄdiem nosacÄ«juma kompilÄcijas simboliem:
Visus pÄrÄjos projektus (2017-2020) veidojam, izmantojot Å”o shÄmu. Life hack - ja velciet failus Solution Explorer nevis no pamatprojekta, bet no projekta, kur tie jau ir ievietoti kÄ saite, tad jums nav jÄtur nospiests Alt taustiÅÅ”!
AprakstÄ«tÄ opcija ir diezgan laba lÄ«dz jaunas spraudÅa versijas pievienoÅ”anas brÄ«dim vai lÄ«dz jaunu failu pievienoÅ”anas brÄ«dim projektam - tas viss kļūst ļoti nogurdinoÅ”s. Un nesen es pÄkÅ”Åi sapratu, kÄ to visu sakÄrtot ar vienu projektu, un mÄs pÄrejam pie otrÄs metodes
KonfigurÄciju maÄ£ija
Pabeidzot lasÄ«t Å”eit, jÅ«s varat iesaukties: "KÄpÄc jÅ«s aprakstÄ«jÄt pirmo metodi, ja raksts ir tieÅ”i par otro?!" Un es visu aprakstÄ«ju, lai bÅ«tu skaidrÄk, kÄpÄc mums ir vajadzÄ«gi nosacÄ«ti apkopoÅ”anas simboli un kurÄs vietÄs mÅ«su projekti atŔķiras. Un tagad mums kļūst skaidrÄk, kÄdas tieÅ”i atŔķirÄ«bas projektos mums ir jÄÄ«steno, atstÄjot tikai vienu projektu.
Un, lai viss bÅ«tu acÄ«mredzamÄk, mÄs neveidosim jaunu projektu, bet veiksim izmaiÅas mÅ«su paÅ”reizÄjÄ projektÄ, kas izveidots pirmajÄ veidÄ.
TÄtad, pirmkÄrt, mÄs no risinÄjuma noÅemam visus projektus, izÅemot galveno (kas satur tieÅ”i failus). Tie. projekti versijÄm 2016-2020. Atveriet mapi ar risinÄjumu un tur izdzÄsiet Å”o projektu mapes.
MÅ«su lÄmumÄ ir palicis viens projekts - MySuperPluginForRevit_2015. Atveriet tÄ rekvizÄ«tus un:
- CilnÄ "Pieteikums"noÅemiet sufiksu no montÄžas nosaukuma _2015 (kÄpÄc kļūs skaidrs vÄlÄk)
- CilnÄ "MontÄžaĀ» noÅemiet nosacÄ«tÄs kompilÄcijas simbolu R2015 no atbilstoÅ”Ä lauka
PiezÄ«me: jaunÄkajÄ Visual Studio versijÄ ir kļūda - nosacÄ«juma kompilÄcijas simboli netiek parÄdÄ«ti projekta rekvizÄ«tu logÄ, lai gan tie ir pieejami. Ja rodas Ŕī kļūme, tÄs ir jÄnoÅem manuÄli no .csproj faila. TomÄr mums vÄl ir jÄpiestrÄdÄ, tÄpÄc lasiet tÄlÄk.
PÄrdÄvÄjiet projektu Solution Explorer logÄ, noÅemot sufiksu _2015 un pÄc tam noÅemiet projektu no risinÄjuma. Tas ir nepiecieÅ”ams, lai uzturÄtu kÄrtÄ«bu un perfekcionistu jÅ«tas! MÄs atveram mÅ«su risinÄjuma mapi, tÄdÄ paÅ”Ä veidÄ pÄrdÄvÄjam tur esoÅ”o projekta mapi un ielÄdÄjam projektu atpakaļ risinÄjumÄ.
Atveriet konfigurÄcijas pÄrvaldnieku. ASV konfigurÄcija Atlaidiet principÄ tas nebÅ«s vajadzÄ«gs, tÄpÄc svÄ«trojam. MÄs veidojam jaunas konfigurÄcijas ar mums jau pazÄ«stamiem nosaukumiem R2015, R2016, ..., R2020. Å emiet vÄrÄ, ka jums nav jÄkopÄ iestatÄ«jumi no citÄm konfigurÄcijÄm un jums nav jÄizveido projekta konfigurÄcijas:
Dodieties uz mapi ar projektu un atveriet failu ar paplaÅ”inÄjumu .csproj sev ÄrtÄ redaktorÄ. Starp citu, to var atvÄrt arÄ« Visual Studio - jÄizlÄdÄ projekts un tad vÄlamais vienums bÅ«s konteksta izvÄlnÄ:
RediÄ£ÄÅ”ana programmÄ Visual Studio ir pat vÄlama, jo redaktors gan lÄ«dzina, gan uzvednÄ.
FailÄ mÄs redzÄsim elementus
PÄrejiet uz kopÄjo (pirmo) elementu PropertyGroup un apskatÄ«t Ä«paÅ”umu AssemblyName ā Å”is ir kopas nosaukums, un mums tas ir jÄbÅ«t bez sufiksa _2015. Ja ir piedÄklis, noÅemiet to.
Elementa atraŔana ar nosacījumu
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
Mums tas nav vajadzÄ«gs - mÄs to izdzÄÅ”am.
Elements ar nosacījumu
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
bÅ«s nepiecieÅ”ams, lai strÄdÄtu koda izstrÄdes un atkļūdoÅ”anas stadijÄ. Varat mainÄ«t tÄ rekvizÄ«tus atbilstoÅ”i savÄm vajadzÄ«bÄm - iestatÄ«t dažÄdus izvades ceļus, mainÄ«t nosacÄ«jumu kompilÄcijas simbolus utt.
Tagad veidosim jaunus elementus PropertyGroup mÅ«su konfigurÄcijÄm. Å ajos elementos mums vienkÄrÅ”i jÄiestata Äetri rekvizÄ«ti:
- Izvades ceļŔ - izvades mape. Es iestatÄ«ju noklusÄjuma vÄrtÄ«bu binR20xx
- DefineConstants ā nosacÄ«juma kompilÄcijas simboli. JÄnorÄda vÄrtÄ«ba TRACE;R20Ń Ń
- TargetFrameworkVersion - platformas versija. DažÄdÄm Revit API versijÄm ir jÄnorÄda dažÄdas platformas.
- AssemblyName ā montÄžas nosaukums (t.i., faila nosaukums). Var uzrakstÄ«t precÄ«zu montÄžas nosaukumu, taÄu daudzpusÄ«bas labad iesaku ierakstÄ«t vÄrtÄ«bu $(AssemblyName)_20Ń Ń . Lai to izdarÄ«tu, mÄs iepriekÅ” noÅÄmÄm sufiksu no montÄžas nosaukuma
Visu Å”o elementu svarÄ«gÄkÄ iezÄ«me ir tÄ, ka tos var vienkÄrÅ”i iekopÄt citos projektos, tos nemaz nemainot. VÄlÄk rakstÄ pievienoÅ”u visu .csproj faila saturu.
Labi, mÄs esam izdomÄjuÅ”i projekta Ä«paŔības - tas nav grÅ«ti. Bet ko darÄ«t ar spraudÅu bibliotÄkÄm (NuGet pakotnÄm). Ja skatÄ«simies tÄlÄk, redzÄsim, ka iekļautÄs bibliotÄkas ir norÄdÄ«tas elementos
Elements nÄk mums palÄ«gÄ
Izmantojot elementu izvÄlÄtiesMÄs iestatÄm dažÄdas NuGet pakotnes dažÄdÄm konfigurÄcijÄm:
Viss saturs 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>
LÅ«dzu, Åemiet vÄrÄ, ka vienÄ no nosacÄ«jumiem es norÄdÄ«ju divas konfigurÄcijas, izmantojot VAI. TÄdÄ veidÄ konfigurÄcijas laikÄ tiks pievienota nepiecieÅ”amÄ pakotne Debug.
Un Å”eit mums ir gandrÄ«z viss ideÄli. MÄs ielÄdÄjam projektu atpakaļ, iespÄjojam nepiecieÅ”amo konfigurÄciju, izsaucam vienumu ā risinÄjuma (nevis projekta) konteksta izvÄlnÄ.Atjaunojiet visas NuGet pakotnes"un mÄs redzam, kÄ mainÄs mÅ«su iepakojumi.
Un Å”ajÄ posmÄ es nonÄcu strupceÄ¼Ä - lai savÄktu visas konfigurÄcijas uzreiz, mÄs varÄtu izmantot partijas montÄžu (izvÄlne "MontÄžaĀ»->Ā«Partijas veidoÅ”ana"), taÄu, pÄrslÄdzot konfigurÄcijas, pakotnes netiek automÄtiski atjaunotas. Un, saliekot projektu, tas arÄ« nenotiek, lai gan teorÄtiski tÄ vajadzÄtu. Es neesmu atradis Ŕīs problÄmas risinÄjumu, izmantojot standarta lÄ«dzekļus. Un, visticamÄk, Ŕī ir arÄ« Visual Studio kļūda.
TÄpÄc partijas montÄžai tika nolemts izmantot Ä«paÅ”u automatizÄtu montÄžas sistÄmu
TÄtad, dodieties uz mÅ«su risinÄjuma (nevis projekta) mapi, turiet nospiestu taustiÅu maiÅa un ar peles labo pogu noklikŔķiniet uz tukÅ”as vietas mapÄ - konteksta izvÄlnÄ atlasiet vienumu "Å eit atveriet PowerShell logu'.
Ja jums tas nav instalÄts nuke,, tad vispirms ierakstiet komandu
dotnet tool install Nuke.GlobalTool āglobal
Tagad uzrakstiet komandu nuke, un jums tiks piedÄvÄts konfigurÄt nuke, paÅ”reizÄjam projektam. Es nezinu, kÄ pareizi uzrakstÄ«t krieviski - angliski tiks rakstÄ«ts NevarÄja atrast .nuke failu. Vai vÄlaties iestatÄ«t bÅ«vniecÄ«bu? [y/n]
Nospiediet taustiÅu Y, un tad bÅ«s tieÅ”ie iestatÄ«jumu vienumi. Mums ir jÄizmanto vienkÄrÅ”Äkais variants MSBuild, tÄpÄc mÄs atbildam kÄ ekrÄnuzÅÄmumÄ:
Dosimies uz Visual Studio, kas liks mums atkÄrtoti ielÄdÄt risinÄjumu, jo tam ir pievienots jauns projekts. MÄs atkÄrtoti ielÄdÄjam risinÄjumu un redzam, ka mums ir projekts bÅ«vÄt kurÄ mÅ«s interesÄ tikai viens fails - Build.cs
Atveriet Å”o failu un uzrakstiet skriptu, lai izveidotu projektu visÄm konfigurÄcijÄm. Vai arÄ« izmantojiet manu skriptu, kuru varat rediÄ£Ät atbilstoÅ”i savÄm vajadzÄ«bÄm:
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"));
}
});
}
MÄs atgriežamies PowerShell logÄ un vÄlreiz ierakstÄm komandu nuke, (varat uzrakstÄ«t komandu nuke, norÄdot nepiecieÅ”amo mÄrÄ·is. Bet mums ir viens mÄrÄ·is, kas darbojas pÄc noklusÄjuma). PÄc Enter taustiÅa nospieÅ”anas jutÄ«simies kÄ Ä«sti hakeri, jo, kÄ jau filmÄ, mÅ«su projekts tiks automÄtiski samontÄts dažÄdÄm konfigurÄcijÄm.
Starp citu, jÅ«s varat izmantot PowerShell tieÅ”i no Visual Studio (izvÄlne "ApskatÄ«tĀ»->Ā«Citi logiĀ»->Ā«PakeÅ”u pÄrvaldnieka konsole"), bet viss bÅ«s melnbalts, kas nav Ä«paÅ”i Ärti.
Tas noslÄdz manu rakstu. Esmu pÄrliecinÄts, ka jÅ«s pats varat izdomÄt AutoCAD opciju. Ceru, ka Å”eit piedÄvÄtais materiÄls atradÄ«s savus āklientusā.
Š”ŠæŠ°ŃŠøŠ±Š¾ Š·Š° Š²Š½ŠøŠ¼Š°Š½ŠøŠµ!
Avots: www.habr.com