ለተለያዩ የRevit/AutoCAD ስሪቶች አንድ ተሰኪ ፕሮጄክት እንሰራለን።

ለተለያዩ የRevit/AutoCAD ስሪቶች አንድ ተሰኪ ፕሮጄክት እንሰራለን።

ለCAD መተግበሪያዎች ተሰኪዎችን ሲገነቡ (በእኔ ሁኔታ እነዚህ AutoCAD, Revit እና Renga ናቸው) በጊዜ ሂደት አንድ ችግር ታየ - አዲስ የፕሮግራሞች ስሪቶች ተለቀቁ, የእነሱ ኤፒአይ ለውጦች እና አዲስ የፕለጊኖች ስሪቶች መደረግ አለባቸው.

አንድ ፕለጊን ብቻ ሲኖርዎት ወይም አሁንም በዚህ ንግድ ውስጥ እራስን የተማሩ ጀማሪ ከሆኑ በቀላሉ የፕሮጀክቱን ቅጂ መስራት፣ አስፈላጊዎቹን ቦታዎች መቀየር እና የፕለጊኑን አዲስ ስሪት መፍጠር ይችላሉ። በዚህ መሠረት፣ በኮዱ ላይ የሚደረጉ ለውጦች ብዙ የሰው ኃይል ወጪዎችን ይጨምራሉ።

ልምድ እና እውቀት ሲያገኙ፣ ይህን ሂደት በራስ ሰር የሚያደርጉበት ብዙ መንገዶችን ያገኛሉ። በዚህ መንገድ ሄጄ ምን እንደጨረስኩ እና ምን ያህል ምቹ እንደሆነ ልነግርዎ እፈልጋለሁ።

በመጀመሪያ, ግልጽ የሆነ እና ለረጅም ጊዜ የተጠቀምኩትን ዘዴ እንመልከት

የፕሮጀክት ፋይሎች አገናኞች

እና ሁሉንም ነገር ቀላል፣ ግልጽ እና ለመረዳት የሚቻል ለማድረግ፣ የፕለጊን ልማት ረቂቅ ምሳሌ በመጠቀም ሁሉንም ነገር እገልጻለሁ።

ቪዥዋል ስቱዲዮን እንክፈተው (የማህበረሰብ 2019 ስሪት አለኝ። እና አዎ - በሩሲያኛ) እና አዲስ መፍትሄ እንፍጠር። እንጥራው። MySuperPluginForRevit

ለተለያዩ የRevit/AutoCAD ስሪቶች አንድ ተሰኪ ፕሮጄክት እንሰራለን።

ለRevit ለ2015-2020 ስሪቶች ተሰኪ እንሰራለን። ስለዚህ, በመፍትሔው ውስጥ አዲስ ፕሮጀክት እፈጥራለሁ (የኔትወርክ ማዕቀፍ ክፍል ቤተ-መጽሐፍት) እና እደውላለሁ MySuperPluginForRevit_2015

ለተለያዩ የRevit/AutoCAD ስሪቶች አንድ ተሰኪ ፕሮጄክት እንሰራለን።

ወደ Revit API ማጣቀሻዎችን ማከል አለብን። በእርግጥ ወደ አካባቢያዊ ፋይሎች አገናኞችን ማከል እንችላለን (ሁሉም አስፈላጊ የሆኑትን ኤስዲኬዎች ወይም ሁሉንም የ Revit ስሪቶች መጫን ያስፈልግዎታል) ነገር ግን በቀጥታ ወደ ፊት እንሄዳለን እና የ NuGet ጥቅልን እናካትታለን። በጣም ጥቂት ፓኬጆችን ማግኘት ትችላለህ፣ ግን እኔ የራሴን እጠቀማለሁ።

ጥቅሉን ካገናኙ በኋላ በንጥሉ ላይ በቀኝ ጠቅ ያድርጉ "ማጣቀሻዎች"እና የምናሌውን ንጥል ይምረጡ"packs.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 ስሪቶች አንድ ተሰኪ ፕሮጄክት እንሰራለን።

በእኔ ሁኔታ፣ በመጨረሻው ምርት፣ የሁሉም ስሪቶች ተሰኪዎች ወደ አንድ አቃፊ ተጨምረዋል፣ ስለዚህ የስብሰባ ስሞቼ ከቅጹ ቅጥያ ጋር ይቀራሉ። _20xx. ነገር ግን ፋይሎቹ በተለያዩ አቃፊዎች ውስጥ እንደሚገኙ ከጠበቁ ቅጥያውን ከስብሰባው ስም ማስወገድ ይችላሉ.

ወደ ፋይሉ ኮድ እንሂድ ክፍል 1.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;
        }
    }
}

ወዲያውኑ ከ 2015 በላይ ያሉትን ሁሉንም የ Revit ስሪቶች ግምት ውስጥ አስገባሁ (ጽሑፉን በሚጽፉበት ጊዜ የነበሩት) እና ወዲያውኑ በተመሳሳይ አብነት መሠረት የምፈጥራቸው ሁኔታዊ የማጠናቀር ምልክቶች መኖራቸውን ግምት ውስጥ አስገባሁ።

ወደ ዋናው ድምቀት እንሂድ። በእኛ መፍትሄ ውስጥ አዲስ ፕሮጀክት እንፈጥራለን, በ Revit 2016 ስር ለተሰኪው ስሪት ብቻ, ከላይ የተገለጹትን ሁሉንም እርምጃዎች እንደግመዋለን, በቅደም ተከተል 2015 ቁጥርን በ 2016 ቁጥር በመተካት ፋይሉ ግን ክፍል 1.cs ከአዲሱ ፕሮጀክት ተወግዷል.

ለተለያዩ የRevit/AutoCAD ስሪቶች አንድ ተሰኪ ፕሮጄክት እንሰራለን።

ከሚፈለገው ኮድ ጋር ፋይል ያድርጉ - ክፍል 1.cs - እኛ ቀድሞውኑ አለን እና ወደ እሱ አገናኝ በአዲስ ፕሮጀክት ውስጥ ማስገባት ብቻ ያስፈልገናል። አገናኞችን ለማስገባት ሁለት መንገዶች አሉ:

  1. ረጅም - በትክክለኛው የመዳፊት ቁልፍ በፕሮጀክቱ ላይ ጠቅ ያድርጉ ፣ ንጥሉን ይምረጡ"ያክሉ»->>ነባር አባል", በሚከፈተው መስኮት ውስጥ ተፈላጊውን ፋይል ያግኙ እና ከአማራጭ ይልቅ"ያክሉ» አማራጭ ምረጥ »እንደ አገናኝ ያክሉ»

ለተለያዩ የRevit/AutoCAD ስሪቶች አንድ ተሰኪ ፕሮጄክት እንሰራለን።

  1. አጭር - ልክ በመፍትሔ አሳሽ ውስጥ የተፈለገውን ፋይል (ወይም እንዲያውም ፋይሎችን ወይም ሙሉ አቃፊዎችን) ይምረጡ እና Alt ቁልፍን በመያዝ ወደ አዲስ ፕሮጀክት ይጎትቱት። ሲጎትቱ Alt ቁልፍን ሲጫኑ በመዳፊት ላይ ያለው ጠቋሚ ከመደመር ምልክት ወደ ቀስት እንደሚቀየር ያያሉ።
    የተዘመነ: በዚህ አንቀፅ ውስጥ ትንሽ ግራ መጋባት ፈጠርኩ - ብዙ ፋይሎችን ለማስተላለፍ ፣ መቆንጠጥ አለብዎት Shift + Alt!

ከሂደቱ በኋላ, በሁለተኛው ፕሮጀክት ውስጥ ፋይል ይኖረናል ክፍል 1.cs በተዛማጅ አዶ (ሰማያዊ ቀስት)

ለተለያዩ የRevit/AutoCAD ስሪቶች አንድ ተሰኪ ፕሮጄክት እንሰራለን።

በአርታዒው መስኮት ውስጥ ኮድን በሚያርትዑበት ጊዜ ኮዱን ለማሳየት በየትኛው ፕሮጀክት አውድ ውስጥ መምረጥ ይችላሉ ፣ ይህም ኮድ በተለያዩ ሁኔታዊ ማጠናቀር ምልክቶች ሲስተካከል ለማየት ያስችልዎታል ።

ለተለያዩ የRevit/AutoCAD ስሪቶች አንድ ተሰኪ ፕሮጄክት እንሰራለን።

በዚህ እቅድ መሰረት, ሁሉንም ሌሎች ፕሮጀክቶችን (2017-2020) እንፈጥራለን. የህይወት ጠለፋ - ፋይሎችን በመፍትሔው አሳሽ ውስጥ ከመሠረታዊ ፕሮጀክቱ ሳይሆን ቀደም ሲል እንደ አገናኝ ከገቡበት ፕሮጀክት ጎትተው ከሆነ የ 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 ስሪቶች አንድ ተሰኪ ፕሮጄክት እንሰራለን።

በቪዥዋል ስቱዲዮ ውስጥ አርትዖት ማድረግ እንኳን ተመራጭ ነው፣ አርታኢው ስለሚያስተካክልና ስለሚጠይቅ።

በፋይሉ ውስጥ ንጥረ ነገሮችን እናያለን የንብረት ቡድን - በጣም አናት ላይ አጠቃላይ ነው ፣ እና ከዚያ ከሁኔታዎች ጋር ይምጡ። እነዚህ ንጥረ ነገሮች በሚገነቡበት ጊዜ የፕሮጀክቱን ባህሪያት ያዘጋጃሉ. የመጀመሪያው ንጥረ ነገር, ያለ ቅድመ ሁኔታ, አጠቃላይ ባህሪያትን ያዘጋጃል, እና ሁኔታዎችን ያዘጋጃል, እንደ ቅደም ተከተላቸው, አንዳንድ ንብረቶችን እንደ ውቅሮች ይለውጣሉ.

ወደ የተለመደው (የመጀመሪያው) አካል ይሂዱ የንብረት ቡድን እና ንብረቱን ይመልከቱ የስብሰባ ስም - ይህ የጉባኤው ስም ነው እና ያለ ቅጥያ ሊኖረን ይገባል _2015. ቅጥያ ካለ, ከዚያ ያስወግዱት.

ሁኔታ ያለው አካል ማግኘት

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

አንፈልግም - እንሰርዘዋለን።

ቅድመ ሁኔታ ያለው አካል

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

በእድገት ደረጃ ላይ ለመስራት እና ኮዱን ለማረም አስፈላጊ ይሆናል. ባህሪያቱን ለፍላጎትዎ መለወጥ ይችላሉ - የተለያዩ የውጤት መንገዶችን ያዘጋጁ ፣ ሁኔታዊ የማጠናቀር ምልክቶችን ይቀይሩ ፣ ወዘተ.

አሁን አዲስ ንጥረ ነገሮችን እንፈጥራለን የንብረት ቡድን ለኛ ውቅሮች. በእነዚህ ንጥረ ነገሮች ውስጥ አራት ንብረቶችን ማዘጋጀት ብቻ ያስፈልገናል-

  • የውጤት ዱካ - የውጤት አቃፊ. ነባሪ እሴት አዘጋጅቻለሁ binR20xx
  • Constants ሁኔታዊ የማጠናቀር ምልክቶች ናቸው። መሆን አለበት ፈለግ; R20xx
  • TargetFramework ስሪት - የመድረክ ስሪት. የተለያዩ የRevit API ስሪቶች የተለያዩ መድረኮችን ማዘጋጀት ይፈልጋሉ።
  • የስብሰባ ስም - የስብሰባ ስም (ማለትም የፋይል ስም)። የሚፈለገውን የመሰብሰቢያ ስም በቀጥታ መጻፍ ይችላሉ, ነገር ግን ለአለም አቀፍነት, እሴቱን እንዲጽፉ እመክርዎታለሁ $(የስብሰባ ስም)_20xx. ይህንን ለማድረግ, ከዚህ ቀደም ቅጥያውን ከስብሰባው ስም አውጥተናል

የእነዚህ ሁሉ አካላት በጣም አስፈላጊው ባህሪ ምንም ሳይቀይሩ በቀላሉ ወደ ሌሎች ፕሮጀክቶች መገልበጥ ነው. በኋላ በጽሁፉ ውስጥ የ .csproj ፋይልን አጠቃላይ ይዘቶች አያይዤዋለሁ።

ደህና, የፕሮጀክቱን ባህሪያት አውቀናል - አስቸጋሪ አይደለም. ነገር ግን በተካተቱት ቤተ-መጻሕፍት (NuGet packs) ምን እንደሚደረግ። ወደ ፊት ከተመለከትን, የተካተቱት ቤተ-መጻሕፍት በንጥረ ነገሮች እንደተገለጹ እናያለን ንጥል ቡድን. ግን ችግሩ እዚህ አለ - ይህ ንጥረ ነገር ሁኔታዎችን በስህተት ያስኬዳል ፣ እንደ አካል የንብረት ቡድን. ምናልባት ይህ የእይታ ስቱዲዮ ብልሽት ነው ፣ ግን ብዙ አካላትን ካዘጋጁ ንጥል ቡድን ከማዋቀሪያ ሁኔታዎች ጋር, እና ከውስጥ ወደ 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 ስሪቶች አንድ ተሰኪ ፕሮጄክት እንሰራለን።

እናም በዚህ ደረጃ, ወደ መጨረሻው መጨረሻ ደረስኩ - ሁሉንም አወቃቀሮችን በአንድ ጊዜ ለመሰብሰብ, የስብስብ ስብስብን (ምናሌ) መጠቀም እንችላለን.መሰብሰብ»->>የቡድን ስብሰባ”)፣ ነገር ግን ውቅሮችን በሚቀይሩበት ጊዜ፣ ጥቅሎች በራስ ሰር ወደነበሩበት አይመለሱም። እና ፕሮጀክቱን በሚገጣጠምበት ጊዜ, እንዲሁ አይከሰትም, ምንም እንኳን, በንድፈ ሀሳብ, መሆን አለበት. ለዚህ ችግር መፍትሔ አላገኘሁም መደበኛ ዘዴ። እና ምናልባትም ይህ የእይታ ስቱዲዮ ስህተት ነው።

ስለዚህ, ለቡድን ስብሰባ, ልዩ አውቶማቲክ የመሰብሰቢያ ዘዴን ለመጠቀም ተወስኗል Nuke. በፕለጊን ልማት ረገድ ከመጠን ያለፈ ነው ብዬ ስለማስብ ይህንን በእውነት አልፈልግም ነበር ፣ ግን በአሁኑ ጊዜ ምንም ሌላ መፍትሄ አላየሁም። እና "ለምን ኑክ?" ለሚለው ጥያቄ መልሱ ቀላል ነው - በሥራ ላይ እንጠቀማለን.

ስለዚህ ወደ የመፍትሄያችን አቃፊ (ፕሮጄክቱ ሳይሆን) ይሂዱ, ቁልፉን ይያዙ መተካት እና በአቃፊው ውስጥ ባለው ባዶ ቦታ ላይ በቀኝ ጠቅ ያድርጉ - በአውድ ምናሌው ውስጥ ንጥሉን ይምረጡ"የPowerShell መስኮትን እዚህ ይክፈቱ».

ለተለያዩ የRevit/AutoCAD ስሪቶች አንድ ተሰኪ ፕሮጄክት እንሰራለን።

እርስዎ ካልጫኑ ኒኮ, ከዚያም በመጀመሪያ ትዕዛዙን ይፃፉ

dotnet tool install Nuke.GlobalTool –global

አሁን ትእዛዝ ጻፍ ኒኮ እና እንዲያዋቅሩ ይጠየቃሉ። ኒኮ ለአሁኑ ፕሮጀክት. በሩሲያኛ በትክክል እንዴት እንደምጽፈው አላውቅም - በእንግሊዝኛ ይጻፋል .nuke ፋይል ማግኘት አልተቻለም። ግንባታ ማዋቀር ይፈልጋሉ? [y/n]

የ Y ቁልፍን ተጫን እና ከዚያ ቀጥታ ቅንጅቶች ይኖራሉ። በጣም ቀላሉን አማራጭ እንጠቀማለን MSBuild, ስለዚህ እንደ ቅጽበታዊ ገጽ እይታው መልስ እንሰጣለን:

ለተለያዩ የRevit/AutoCAD ስሪቶች አንድ ተሰኪ ፕሮጄክት እንሰራለን።

ወደ ቪዥዋል ስቱዲዮ እንሂድ፣ ይህም አዲስ ፕሮጀክት ስለተጨመረበት መፍትሄውን እንደገና ለመጫን ይገፋፋናል። መፍትሄውን እንደገና ይጫኑ እና ፕሮጀክት እንዳለን ይመልከቱ መገንባት እኛ የምንፈልገው በአንድ ፋይል ውስጥ ብቻ ነው - 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 ምርጫን እራስዎ ማወቅ ይችላሉ። እዚህ የቀረበው ቁሳቁስ "ደንበኞቹን" እንደሚያገኝ ተስፋ አደርጋለሁ.

ለሚያደርጉት ጥረት እናመሰግናለን!

ምንጭ: hab.com

አስተያየት ያክሉ