Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Lè w ap devlope grefon pou aplikasyon CAD (nan ka mwen an sa yo se AutoCAD, Revit ak Renga) sou tan, yon pwoblèm parèt - nouvo vèsyon pwogram yo lage, chanjman API yo ak nouvo vèsyon grefon yo bezwen fèt.

Lè ou gen yon sèl Plugin oswa ou toujou yon debutan endepandan nan zafè sa a, ou ka tou senpleman fè yon kopi pwojè a, chanje kote ki nesesè yo nan li epi rasanble yon nouvo vèsyon nan Plugin la. An konsekans, chanjman ki vin apre nan kòd la pral enplike yon ogmantasyon miltip nan depans travay.

Pandan w ap pran eksperyans ak konesans, w ap jwenn plizyè fason pou otomatize pwosesis sa a. Mwen te mache sou chemen sa a epi mwen vle di ou kisa mwen te fini ak ki jan li pratik.

Premyèman, ann gade nan yon metòd ki evidan e ke mwen te itilize pou yon tan long.

Lyen ki mennen nan dosye pwojè yo

Ak fè tout bagay senp, vizyèl ak konprann, mwen pral dekri tout bagay lè l sèvi avèk yon egzanp abstrè nan devlopman plugin.

Ann louvri Visual Studio (mwen gen vèsyon Kominote 2019 la. E wi - an Ris) epi kreye yon nouvo solisyon. Ann rele l MySuperPluginForRevit

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Nou pral fè yon plugin pou Revit pou vèsyon 2015-2020. Se poutèt sa, ann kreye yon nouvo pwojè nan solisyon an (Net Framework Class Library) epi rele li MySuperPluginForRevit_2015

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Nou bezwen ajoute lyen ki mennen nan API Revit. Natirèlman, nou ka ajoute lyen ki mennen nan dosye lokal yo (nou pral bezwen enstale tout SDK ki nesesè yo oswa tout vèsyon Revit), men nou pral imedyatman swiv chemen ki dwat la epi konekte pake NuGet la. Ou ka jwenn anpil pakè, men mwen pral sèvi ak pwòp pa m '.

Apre konekte pake a, klike sou atik la "Referans"epi chwazi atik la"Deplase packages.config nan PackageReference...»

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Si toudenkou nan pwen sa a ou kòmanse panike, paske nan fenèt pwopriyete pake a pa pral gen okenn atik enpòtan "Kopi lokalman", ki nou definitivman bezwen mete nan valè a fo, Lè sa a, pa panike - ale nan katab la ak pwojè a, louvri dosye a ak ekstansyon an .csproj nan yon editè ki bon pou ou (mwen sèvi ak Notepad ++) epi jwenn yon antre sou pake nou an la. Li sanble sa a kounye a:

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

Ajoute yon pwopriyete sou li ègzekutabl. Li pral tounen tankou sa a:

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

Koulye a, lè bati yon pwojè, dosye ki soti nan pake a pa pral kopye nan katab pwodiksyon an.
Ann ale pi lwen - ann imajine imedyatman ke Plugin nou an pral sèvi ak yon bagay ki soti nan API Revit la, ki te chanje sou tan lè nouvo vèsyon yo te lage. Oke, oswa nou jis bezwen chanje yon bagay nan kòd la depann sou vèsyon an nan Revit pou ki nou ap fè Plugin la. Pou rezoud diferans sa yo nan kòd, nou pral sèvi ak senbòl konpilasyon kondisyonèl. Louvri pwopriyete pwojè yo, ale nan tab la "Asanble"ak nan jaden an"Notasyon konpilasyon kondisyonèl"Ann ekri R2015.

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Remake byen ke senbòl la dwe ajoute pou tou de konfigirasyon Debug ak Release.

Oke, pandan ke nou nan fenèt pwopriyete yo, nou imedyatman ale nan " tab laAplikasyon"ak nan jaden an"Default namespace» retire sifiks la _2015pou espas non nou an inivèsèl epi endepandan de non asanble a:

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Nan ka mwen an, nan pwodwi final la, grefon tout vèsyon yo mete nan yon sèl katab, kidonk non asanble mwen yo rete ak sifiks fòm lan. _20хх. Men, ou ka tou retire sifiks nan non asanble a si dosye yo sipoze yo sitiye nan dosye diferan.

Ann ale nan kòd dosye a Class1.cs ak simulation kèk kòd la, pran an kont diferan vèsyon nan 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;
        }
    }
}

Mwen imedyatman te pran an kont tout vèsyon Revit ki pi wo a vèsyon 2015 (ki te disponib nan moman ekri a) epi imedyatman te pran an kont prezans senbòl konpilasyon kondisyonèl, ki te kreye lè l sèvi avèk menm modèl la.

Ann ale nan rekò prensipal la. Nou kreye yon nouvo pwojè nan solisyon nou an, sèlman pou vèsyon an nan Plugin la pou Revit 2016. Nou repete tout etap ki dekri pi wo a, respektivman, ranplase nimewo a 2015 ak nimewo a 2016. Men, dosye a Class1.cs efase nan nouvo pwojè a.

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Fichye ak kòd ki nesesè yo - Class1.cs – nou deja genyen li epi nou jis bezwen mete yon lyen nan li nan yon nouvo pwojè. Gen de fason pou mete lyen:

  1. Long - klike sou pwojè a epi chwazi "Add»->«Eleman ki egziste", nan fenèt la ki ouvè, jwenn dosye ki nesesè a epi olye pou yo opsyon a "Add"chwazi opsyon a"Ajoute kòm koneksyon»

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

  1. Kout – dirèkteman nan eksploratè solisyon an, chwazi fichye a vle (oswa menm dosye, oswa menm dosye antye) epi trennen li nan yon nouvo pwojè pandan w ap kenbe kle Alt la. Pandan w ap trennen, w ap wè ke lè w peze kle Alt la, kurseur sourit la ap chanje soti nan yon siy plis nan yon flèch.
    UPS: Mwen te fè yon ti konfizyon nan paragraf sa a - pou transfere plizyè dosye ou ta dwe kenbe Shift + Alt!

Apre w fin fè pwosedi a, nou pral gen yon dosye nan dezyèm pwojè a Class1.cs ak icon ki koresponn lan (flèch ble):

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Lè w ap modifye kòd nan fenèt editè a, ou ka chwazi tou nan ki kontèks pwojè pou w montre kòd la, sa ki pral pèmèt ou wè kòd la ap modifye anba diferan senbòl konpilasyon kondisyonèl:

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Nou kreye tout lòt pwojè (2017-2020) lè l sèvi avèk konplo sa a. Hack lavi - si ou trennen fichye nan Solution Explorer a pa soti nan pwojè baz la, men nan pwojè a kote yo deja mete kòm yon lyen, Lè sa a, ou pa bezwen kenbe kle a Alt!

Opsyon ki dekri a se byen bon jiskaske moman sa a nan ajoute yon nouvo vèsyon nan Plugin la oswa jiskaske moman sa a nan ajoute nouvo dosye nan pwojè a - tout bagay sa a vin trè fatigan. Ak dènyèman mwen toudenkou toudenkou reyalize ki jan yo rezoud li tout soti ak yon pwojè epi nou ap deplase sou dezyèm metòd la.

Majik la nan konfigirasyon

Lè w fin li la a, ou ka di: “Poukisa ou te dekri premye metòd la, si atik la imedyatman sou dezyèm lan?!” Apre sa, mwen te dekri tout bagay yo fè li pi klè poukisa nou bezwen senbòl konpilasyon kondisyonèl ak nan ki kote pwojè nou yo diferan. Epi kounye a li vin pi klè pou nou egzakteman ki diferans ki genyen nan pwojè nou bezwen aplike, kite yon sèl pwojè.

Epi pou fè tout bagay pi evidan, nou pa pral kreye yon nouvo pwojè, men nou pral fè chanjman nan pwojè aktyèl nou an ki te kreye nan premye fason an.

Se konsa, anvan tout bagay, nou retire tout pwojè nan solisyon an eksepte prensipal la (ki gen dosye yo dirèkteman). Moun sa yo. pwojè pou vèsyon 2016-2020. Louvri katab la ak solisyon an epi efase dosye yo nan pwojè sa yo la.

Nou gen yon pwojè ki rete nan desizyon nou an - MySuperPluginForRevit_2015. Louvri pwopriyete li yo ak:

  1. Sou tab la "Aplikasyon"retire sifiks nan non asanble a _2015 (li pral vin klè poukisa pita)
  2. Sou tab la "Asanble» retire senbòl konpilasyon kondisyonèl la R2015 soti nan jaden ki koresponn lan

Remak: dènye vèsyon Visual Studio a gen yon ensèk - senbòl konpilasyon kondisyonèl yo pa parèt nan fenèt pwopriyete pwojè a, byenke yo disponib. Si ou fè eksperyans pwoblèm sa a, Lè sa a, ou bezwen retire yo manyèlman nan dosye a .csproj. Sepandan, nou toujou gen travay nan li, kidonk li sou.

Chanje non pwojè a nan fenèt Solution Explorer a lè w retire sifiks la _2015 epi retire pwojè a nan solisyon an. Sa a se nesesè yo kenbe lòd ak santiman pèfeksyonis! Nou louvri katab solisyon nou an, chanje non katab pwojè a nan menm fason an epi chaje pwojè a tounen nan solisyon an.

Louvri manadjè konfigirasyon an. US konfigirasyon Remèt an prensip, li pa pral bezwen, kidonk nou efase li. Nou kreye nouvo konfigirasyon ak non ki deja abitye pou nou R2015, R2016, ..., R2020. Remake byen ke ou pa bezwen kopye anviwònman ki soti nan lòt konfigirasyon epi ou pa bezwen kreye konfigirasyon pwojè:

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Ale nan katab la ak pwojè a epi louvri dosye a ak ekstansyon .csproj nan yon editè ki bon pou ou. By wout la, ou ka tou louvri li nan Visual Studio - ou bezwen dechaje pwojè a ak Lè sa a, atik la vle yo pral nan meni an kontèks:

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Edite nan Visual Studio se menm pi preferab, depi editè a tou de aliyen ak envit.

Nan dosye a nou pral wè eleman yo PropertyGroup - nan tèt la se yon sèl jeneral la, ak Lè sa a, vini kondisyon yo. Eleman sa yo mete pwopriyete yo nan pwojè a lè li se bati. Eleman nan premye, ki se san kondisyon, mete pwopriyete jeneral, ak eleman ki gen kondisyon, kòmsadwa, chanje kèk pwopriyete depann sou konfigirasyon yo.

Ale nan eleman komen (premye). PropertyGroup epi gade nan pwopriyete a AssemblyName – sa a se non asanble a epi nou ta dwe genyen li san yon sifiks _2015. Si gen yon sifiks, Lè sa a, retire li.

Jwenn yon eleman ki gen yon kondisyon

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

Nou pa bezwen li - nou efase li.

Eleman ak kondisyon

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

yo pral bezwen travay nan etap nan devlopman kòd ak debogaj. Ou ka chanje pwopriyete li yo selon bezwen ou yo - mete diferan chemen pwodiksyon, chanje senbòl konpilasyon kondisyonèl, elatriye.

Koulye a, an n kreye nouvo eleman PropertyGroup pou konfigirasyon nou yo. Nan eleman sa yo nou jis bezwen mete kat pwopriyete:

  • OutputPath - katab pwodiksyon. Mwen mete valè default la binR20xx
  • DefineConstants - senbòl konpilasyon kondisyonèl. Valè a ta dwe espesifye TRACE;R20хх
  • TargetFrameworkVersion - vèsyon platfòm. Diferan vèsyon API Revit mande pou diferan platfòm yo dwe espesifye.
  • AssemblyName - non asanble (sa vle di non dosye). Ou ka ekri non egzak asanble a, men pou adaptabilite mwen rekòmande ekri valè a $(AssemblyName)_20хх. Pou fè sa, nou te deja retire sifiks nan non asanble a

Karakteristik ki pi enpòtan nan tout eleman sa yo se ke yo ka tou senpleman kopye nan lòt pwojè san yo pa chanje yo ditou. Pita nan atik la mwen pral tache tout sa ki nan dosye a .csproj.

Oke, nou te kalkile pwopriyete yo nan pwojè a - li pa difisil. Men, kisa pou w fè ak bibliyotèk plug-in (pakè NuGet). Si nou gade pi lwen, nou pral wè ke bibliyotèk enkli yo espesifye nan eleman yo ItemGroup. Men, move chans - eleman sa a mal trete kondisyon yo kòm yon eleman PropertyGroup. Petèt sa a se menm yon glitch Visual Studio, men si ou presize plizyè eleman ItemGroup ak kondisyon konfigirasyon, epi mete lyen diferan nan pakè NuGet andedan, Lè sa a, lè ou chanje konfigirasyon an, tout pakè espesifye yo konekte ak pwojè a.

Eleman an vin ede nou Chwazi, ki travay selon lojik abityèl nou an si-Lè sa-a-lòt moun.

Sèvi ak eleman Chwazi, nou mete diferan pakè NuGet pou konfigirasyon diferan:

Tout sa ki nan 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>

Tanpri sonje ke nan youn nan kondisyon yo mwen espesifye de konfigirasyon atravè OSWA. Nan fason sa a, pake ki nesesè yo pral konekte pandan konfigirasyon Debug.

Ak isit la nou gen prèske tout bagay pafè. Nou chaje pwojè a tounen, pèmèt konfigirasyon nou bezwen an, rele atik la " nan meni an kontèks nan solisyon an (pa pwojè a)Retabli tout pakè NuGet yo"e nou wè ki jan pakè nou yo chanje.

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Ak nan etap sa a mwen te rive nan yon fen mouri - yo nan lòd yo kolekte tout konfigirasyon yo nan yon fwa, nou te kapab itilize asanble pakèt (meni "Asanble»->«Batch bati"), men lè chanje konfigirasyon, pakè yo pa otomatikman retabli. Ak lè rasanble pwojè a, sa a tou pa rive, byenke, nan teyori, li ta dwe. Mwen pa jwenn yon solisyon a pwoblèm sa a lè l sèvi avèk mwayen estanda. Ak gen plis chans sa a se tou yon ensèk Visual Studio.

Se poutèt sa, pou asanble pakèt, li te deside sèvi ak yon sistèm espesyal asanble otomatik nuk. Mwen aktyèlman pa t 'vle sa a, kòm mwen konsidere li twòp nan kad devlopman plugin, men nan moman sa a mwen pa wè okenn lòt solisyon. Ak kesyon an "Poukisa Nuke?" Repons lan se senp - nou itilize li nan travay.

Se konsa, ale nan katab solisyon nou an (pa pwojè a), kenbe kle a Ka glise ak dwa-klike sou yon espas vid nan katab la - nan meni an kontèks chwazi atik la "Louvri fenèt PowerShell isit la'.

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Si ou pa gen li enstale nuk, Lè sa a, premye ekri kòmandman an

dotnet tool install Nuke.GlobalTool –global

Koulye a, ekri kòmandman an nuk epi w ap mande w konfigirasyon nuk pou pwojè aktyèl la. Mwen pa konnen ki jan yo ekri sa a pi kòrèkteman an Ris - an angle li pral ekri Could not find .nuke file. ou vle konfigirasyon yon bati? [ou/non]

Peze kle Y ak Lè sa a, pral gen atik paramèt dirèk. Nou bezwen opsyon ki pi senp lè l sèvi avèk MSBuild, Se konsa, nou reponn tankou nan ekran an:

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Ann ale nan Visual Studio, ki pral pouse nou rechaje solisyon an, depi yon nouvo pwojè yo te ajoute nan li. Nou rechaje solisyon an epi wè ke nou gen yon pwojè bati kote nou enterese nan yon sèl dosye - Build.cs

Nou fè yon sèl pwojè plugin ak konpilasyon pou diferan vèsyon Revit/AutoCAD

Louvri fichye sa a epi ekri yon script pou konstwi pwojè a pou tout konfigirasyon yo. Oke, oswa sèvi ak script mwen an, ke ou ka edite pou satisfè bezwen ou yo:

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

Nou retounen nan fenèt PowerShell la epi ekri kòmandman an ankò nuk (ou ka ekri kòmandman an nuk endike sa ki nesesè yo sib. Men, nou gen youn sib, ki kouri pa default). Apre w fin peze kle a Antre, nou pral santi tankou entru reyèl, paske, tankou nan yon fim, pwojè nou an pral otomatikman reyini pou konfigirasyon diferan.

By wout la, ou ka itilize PowerShell dirèkteman nan Visual Studio (meni "»->«Lòt fenèt yo»->«Konsole Manadjè pake"), men tout bagay pral nan nwa ak blan, ki pa trè pratik.

Sa a fini atik mwen an. Mwen sèten ke ou ka konnen opsyon pou AutoCAD tèt ou. Mwen espere ke materyèl la prezante isit la pral jwenn "kliyan" li yo.

Mèsi pou atansyon ou!

Sous: www.habr.com

Add nouvo kòmantè