අපි Revit/AutoCAD හි විවිධ අනුවාද සඳහා සම්පාදනය සමඟ එක් ප්ලගින ව්‍යාපෘතියක් සාදන්නෙමු

අපි Revit/AutoCAD හි විවිධ අනුවාද සඳහා සම්පාදනය සමඟ එක් ප්ලගින ව්‍යාපෘතියක් සාදන්නෙමු

CAD යෙදුම් සඳහා ප්ලගීන සංවර්ධනය කිරීමේදී (මගේ තත්වයේදි මේවා AutoCAD, Revit සහ Renga) කාලයත් සමඟ එක් ගැටළුවක් දිස්වේ - වැඩසටහන් වල නව අනුවාද නිකුත් කරනු ලැබේ, ඒවායේ API වෙනස්කම් සහ ප්ලගීන වල නව අනුවාද සෑදිය යුතුය.

ඔබට ඇත්තේ එක් ප්ලගිනයක් පමණක් වන විට හෝ ඔබ තවමත් මෙම කාරණය සම්බන්ධයෙන් ස්වයං-ඉගැන්වූ ආරම්භකයකු වන විට, ඔබට සරලවම ව්‍යාපෘතියේ පිටපතක් සාදා, එහි අවශ්‍ය ස්ථාන වෙනස් කර ප්ලගිනයේ නව අනුවාදයක් එක්රැස් කළ හැකිය. ඒ අනුව, කේතයේ පසුකාලීන වෙනස්කම් ශ්‍රම පිරිවැයේ බහුවිධ වැඩි වීමක් ඇති කරයි.

ඔබ අත්දැකීම් සහ දැනුම ලබා ගන්නා විට, මෙම ක්රියාවලිය ස්වයංක්රීය කිරීමට ක්රම කිහිපයක් ඔබට සොයාගත හැකිය. මම මෙම මාර්ගයේ ගමන් කළ අතර මා අවසන් කළ දේ සහ එය කොතරම් පහසුද යන්න ඔබට පැවසීමට මට අවශ්‍යය.

පළමුව, පැහැදිලි සහ මම දිගු කලක් භාවිතා කළ ක්‍රමයක් දෙස බලමු.

ව්‍යාපෘති ගොනු වෙත සබැඳි

සෑම දෙයක්ම සරල, දෘශ්‍ය සහ තේරුම් ගත හැකි බවට පත් කිරීම සඳහා, මම ප්ලගින සංවර්ධනය පිළිබඳ වියුක්ත උදාහරණයක් භාවිතා කරමින් සියල්ල විස්තර කරමි.

අපි Visual Studio විවෘත කරමු (මගේ Community 2019 අනුවාදය. ඔව් - රුසියානු භාෂාවෙන්) සහ නව විසඳුමක් සාදන්න. අපි ඔහුට කතා කරමු MySuperPluginForRevit

අපි Revit/AutoCAD හි විවිධ අනුවාද සඳහා සම්පාදනය සමඟ එක් ප්ලගින ව්‍යාපෘතියක් සාදන්නෙමු

අපි 2015-2020 අනුවාද සඳහා Revit සඳහා ප්ලගිනයක් සාදන්නෙමු. එබැවින්, විසඳුමේ (ශුද්ධ රාමු පන්ති පුස්තකාලය) නව ව්යාපෘතියක් නිර්මාණය කර එය අමතන්න MySuperPluginForRevit_2015

අපි Revit/AutoCAD හි විවිධ අනුවාද සඳහා සම්පාදනය සමඟ එක් ප්ලගින ව්‍යාපෘතියක් සාදන්නෙමු

අපි Revit API වෙත සබැඳි එක් කළ යුතුයි. ඇත්ත වශයෙන්ම, අපට දේශීය ලිපිගොනු වෙත සබැඳි එකතු කළ හැකිය (අපට අවශ්‍ය සියලුම SDKs හෝ 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 හි විවිධ අනුවාද සඳහා සම්පාදනය සමඟ එක් ප්ලගින ව්‍යාපෘතියක් සාදන්නෙමු

මගේ නඩුවේදී, අවසාන නිෂ්පාදනයේදී, සියලුම අනුවාදවල ප්ලගීන එක් ෆෝල්ඩරයකට දමනු ලැබේ, එබැවින් මගේ එකලස් කිරීමේ නම් පෝරමයේ උපසර්ගය සමඟ පවතී. _20xx. නමුත් ගොනු විවිධ ෆෝල්ඩරවල පිහිටා තිබිය යුතු නම්, ඔබට එකලස් කිරීමේ නාමයෙන් උපසර්ගය ඉවත් කළ හැකිය.

අපි ගොනු කේතය වෙත යමු 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;
        }
    }
}

මම වහාම 2015 අනුවාදයේ ඉහත Revit හි සියලුම අනුවාද (ලියන අවස්ථාවේදී ලබා ගත හැකි විය) සැලකිල්ලට ගත් අතර එකම අච්චුව භාවිතයෙන් නිර්මාණය කරන ලද කොන්දේසි සහිත සම්පාදන සංකේත තිබීම වහාම සැලකිල්ලට ගත්තෙමි.

අපි ප්රධාන උද්දීපනය වෙත යමු. 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) නිර්මාණය කරමු. Life hack - ඔබ Solution Explorer හි ගොනු ඇදගෙන යන්නේ මූලික ව්‍යාපෘතියෙන් නොව, ඒවා දැනටමත් සබැඳියක් ලෙස ඇතුළත් කර ඇති ව්‍යාපෘතියෙන් නම්, ඔබට Alt යතුර ඔබාගෙන සිටීමට අවශ්‍ය නැත!

විස්තර කරන ලද විකල්පය ප්ලගිනයේ නව අනුවාදයක් එකතු කරන මොහොත දක්වා හෝ ව්‍යාපෘතියට නව ලිපිගොනු එකතු කරන මොහොත දක්වා තරමක් හොඳයි - මේ සියල්ල ඉතා වෙහෙසකර වේ. මෑතකදී මම හදිසියේම එක් ව්‍යාපෘතියකින් සියල්ල විසඳන්නේ කෙසේදැයි තේරුම් ගත් අතර අපි දෙවන ක්‍රමයට යමු

වින්‍යාසවල මායාව

මෙහි කියවීම අවසන් වූ පසු, “ලිපිය වහාම දෙවැන්න ගැන නම්, ඔබ පළමු ක්‍රමය විස්තර කළේ ඇයි?!” අපට කොන්දේසි සහිත සම්පාදන සංකේත අවශ්‍ය වන්නේ ඇයි සහ අපගේ ව්‍යාපෘති වෙනස් වන්නේ කුමන ස්ථානවලද යන්න වඩාත් පැහැදිලි කිරීමට මම සියල්ල විස්තර කළෙමි. එක් ව්‍යාපෘතියක් පමණක් ඉතිරි කරමින් අප ක්‍රියාත්මක කළ යුතු ව්‍යාපෘතිවල වෙනස්කම් මොනවාදැයි දැන් අපට පැහැදිලි වේ.

තවද සෑම දෙයක්ම වඩාත් පැහැදිලි කිරීමට, අපි නව ව්යාපෘතියක් නිර්මාණය නොකරමු, නමුත් පළමු ආකාරයෙන් නිර්මාණය කර ඇති අපගේ වත්මන් ව්යාපෘතියට වෙනස්කම් සිදු කරන්නෙමු.

එබැවින්, පළමුවෙන්ම, අපි ප්රධාන එක හැර (කෙලින්ම ගොනු අඩංගු) විසඳුමෙන් සියලුම ව්යාපෘති ඉවත් කරමු. එම. 2016-2020 අනුවාද සඳහා ව්‍යාපෘති. විසඳුම සමඟ ෆෝල්ඩරය විවෘත කර එහි ඇති මෙම ව්යාපෘතිවල ෆෝල්ඩර මකා දමන්න.

අපගේ තීරණයේ එක් ව්‍යාපෘතියක් ඉතිරිව ඇත - MySuperPluginForRevit_2015. එහි ගුණාංග විවෘත කරන්න සහ:

  1. ටැබ් එක මත "අයදුම්පතඑකලස් කිරීමේ නාමයෙන් උපසර්ගය ඉවත් කරන්න _2015 (ඒ මන්දැයි පසුව පැහැදිලි වනු ඇත)
  2. ටැබ් එක මත "සභාව» කොන්දේසි සහිත සම්පාදන සංකේතය ඉවත් කරන්න R2015 අනුරූප ක්ෂේත්රයෙන්

සටහන: විෂුවල් ස්ටූඩියෝ හි නවතම අනුවාදයේ දෝෂයක් ඇත - කොන්දේසි සහිත සම්පාදන සංකේත ව්‍යාපෘති ගුණාංග කවුළුව තුළ ප්‍රදර්ශනය නොවේ, නමුත් ඒවා තිබේ. ඔබ මෙම දෝෂය අත්විඳින්නේ නම්, ඔබ ඒවා .csproj ගොනුවෙන් අතින් ඉවත් කළ යුතුය. කෙසේ වෙතත්, අපට තවමත් එහි වැඩ කිරීමට සිදු වේ, එබැවින් කියවන්න.

උපසර්ගය ඉවත් කිරීමෙන් Solution Explorer කවුළුවෙහි ව්‍යාපෘතිය නැවත නම් කරන්න _2015 ඉන්පසු විසඳුමෙන් ව්යාපෘතිය ඉවත් කරන්න. පරිපූර්ණවාදීන්ගේ පිළිවෙල සහ හැඟීම් පවත්වා ගැනීම සඳහා මෙය අවශ්ය වේ! අපි අපගේ විසඳුමේ ෆෝල්ඩරය විවෘත කර, එහි ඇති ව්‍යාපෘති ෆෝල්ඩරය එලෙසම නැවත නම් කර ව්‍යාපෘතිය නැවත විසඳුමට පටවන්නෙමු.

වින්‍යාස කළමනාකරු විවෘත කරන්න. එක්සත් ජනපද වින්‍යාසය නිකුතු ප්‍රතිපත්තිමය වශයෙන්, එය අවශ්‍ය නොවනු ඇත, එබැවින් අපි එය මකා දමමු. අපි දැනටමත් අපට හුරුපුරුදු නම් සමඟ නව වින්‍යාසයන් සාදන්නෙමු R2015, R2016,…, R2020. ඔබට වෙනත් වින්‍යාසයන්ගෙන් සැකසීම් පිටපත් කිරීමට අවශ්‍ය නොවන අතර ඔබට ව්‍යාපෘති වින්‍යාස කිරීම් සෑදීමට අවශ්‍ය නොවන බව සලකන්න:

අපි Revit/AutoCAD හි විවිධ අනුවාද සඳහා සම්පාදනය සමඟ එක් ප්ලගින ව්‍යාපෘතියක් සාදන්නෙමු

ව්‍යාපෘතිය සහිත ෆෝල්ඩරය වෙත ගොස් ඔබට පහසු සංස්කාරකයක .csproj දිගුව සමඟ ගොනුව විවෘත කරන්න. මාර්ගය වන විට, ඔබට එය විෂුවල් ස්ටුඩියෝ තුළද විවෘත කළ හැකිය - ඔබට ව්‍යාපෘතිය බෑමට අවශ්‍ය වන අතර පසුව අපේක්ෂිත අයිතමය සන්දර්භය මෙනුවේ ඇත:

අපි Revit/AutoCAD හි විවිධ අනුවාද සඳහා සම්පාදනය සමඟ එක් ප්ලගින ව්‍යාපෘතියක් සාදන්නෙමු

Visual Studio හි සංස්කරණය කිරීම වඩාත් යෝග්‍ය වේ, මන්ද සංස්කාරකය පෙළගස්වන සහ විමසන බැවිනි.

ගොනුව තුළ අපි මූලද්රව්ය දකිනු ඇත දේපල සමූහය - ඉහළින්ම ඇත්තේ සාමාන්‍ය එකක් වන අතර පසුව කොන්දේසි පැමිණේ. මෙම මූලද්රව්ය එය ඉදි කරන විට ව්යාපෘතියේ ගුණාංග සකසයි. කොන්දේසි රහිත පළමු මූලද්‍රව්‍යය, සාමාන්‍ය ගුණාංග සකසයි, සහ කොන්දේසි සහිත මූලද්‍රව්‍ය, ඒ අනුව, වින්‍යාසයන් මත පදනම්ව සමහර ගුණාංග වෙනස් කරයි.

පොදු (පළමු) මූලද්රව්යයට යන්න දේපල සමූහය සහ දේපල දෙස බලන්න රැස්වීමේ නම - මෙය එකලස් කිරීමේ නම වන අතර අපට එය උපසර්ගයකින් තොරව තිබිය යුතුය _2015. උපසර්ගයක් තිබේ නම්, එය ඉවත් කරන්න.

කොන්දේසියක් සහිත මූලද්රව්යයක් සොයා ගැනීම

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

අපට එය අවශ්ය නොවේ - අපි එය මකා දමමු.

කොන්දේසි සහිත මූලද්රව්යය

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

කේත සංවර්ධනය සහ දෝෂහරණය කිරීමේ අදියරේදී වැඩ කිරීමට අවශ්ය වනු ඇත. ඔබට එහි ගුණාංග ඔබේ අවශ්‍යතාවයට ගැලපෙන පරිදි වෙනස් කළ හැකිය - විවිධ ප්‍රතිදාන මාර්ග සැකසීම, කොන්දේසි සහිත සම්පාදන සංකේත වෙනස් කිරීම යනාදිය.

දැන් අපි නව මූලද්රව්ය නිර්මාණය කරමු දේපල සමූහය අපගේ සැකසුම් සඳහා. මෙම මූලද්‍රව්‍ය තුළ අපට අවශ්‍ය වන්නේ ගුණාංග හතරක් සැකසීමට පමණි:

  • OutputPath - ප්රතිදාන ෆෝල්ඩරය. මම පෙරනිමි අගය සකස් කළෙමි binR20xx
  • නියතයන් නිර්වචනය කරන්න - කොන්දේසි සහිත සම්පාදන සංකේත. අගය සඳහන් කළ යුතුය TRACE;R20xx
  • TargetFramework අනුවාදය - වේදිකා අනුවාදය. Revit API හි විවිධ අනුවාද සඳහා විවිධ වේදිකා නියම කිරීමට අවශ්‍ය වේ.
  • රැස්වීමේ නම - එකලස් කිරීමේ නම (එනම් ගොනු නාමය). ඔබට එකලස් කිරීමේ නිශ්චිත නම ලිවිය හැකිය, නමුත් බහුකාර්යතාව සඳහා මම අගය ලිවීමට නිර්දේශ කරමි $(AssemblyName)_20хх. මෙය සිදු කිරීම සඳහා, අපි මීට පෙර එකලස් කිරීමේ නාමයෙන් උපසර්ගය ඉවත් කළෙමු

මෙම සියලුම අංගවල ඇති වැදගත්ම ලක්ෂණය නම් ඒවා කිසිසේත් වෙනස් නොකර වෙනත් ව්‍යාපෘතිවලට පිටපත් කළ හැකි වීමයි. පසුව ලිපියේ මම .csproj ගොනුවේ සියලුම අන්තර්ගතයන් අමුණන්නෙමි.

හොඳයි, අපි ව්‍යාපෘතියේ ගුණාංග හඳුනාගෙන ඇත - එය අපහසු නැත. නමුත් ප්ලග්-ඉන් පුස්තකාල (NuGet පැකේජ) සමඟ කළ යුතු දේ. අපි තව දුරටත් බැලුවහොත්, ඇතුළත් කර ඇති පුස්තකාල මූලද්රව්යවල නිශ්චිතව දක්වා ඇති බව අපට පෙනෙනු ඇත අයිතම සමූහය. නමුත් අවාසනාව - මෙම මූලද්රව්යය මූලද්රව්යයක් ලෙස කොන්දේසි වැරදි ලෙස සකසයි දේපල සමූහය. සමහර විට මෙය 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 හි විවිධ අනුවාද සඳහා සම්පාදනය සමඟ එක් ප්ලගින ව්‍යාපෘතියක් සාදන්නෙමු

මෙම අවස්ථාවෙහිදී මම අවසානයකට පැමිණියෙමි - සියලුම වින්‍යාසයන් එකවර එකතු කිරීම සඳහා, අපට කණ්ඩායම් එකලස් කිරීම භාවිතා කළ හැකිය (මෙනුව "සභාව»->«කණ්ඩායම් ගොඩනැගීම"), නමුත් වින්‍යාසයන් මාරු කිරීමේදී, පැකේජ ස්වයංක්‍රීයව ප්‍රතිසාධනය නොවේ. ව්‍යාපෘතිය එකලස් කිරීමේදී, මෙය ද සිදු නොවේ, නමුත් න්‍යායාත්මකව එය කළ යුතුය. සම්මත ක්‍රම භාවිතා කරමින් මම මෙම ගැටලුවට විසඳුමක් සොයාගෙන නැත. තවද බොහෝ විට මෙය ද විෂුවල් ස්ටුඩියෝ දෝෂයක් විය හැකිය.

එබැවින්, කණ්ඩායම් එකලස් කිරීම සඳහා, විශේෂ ස්වයංක්රීය එකලස් කිරීමේ පද්ධතියක් භාවිතා කිරීමට තීරණය විය අත හදාබැලීම්. ඇත්තටම මට මේක අවශ්‍ය වුනේ නෑ මොකද මම හිතන්නේ ප්ලගින ඩිවලොප්මන්ට් අතින් මේක overkill කියලයි, නමුත් දැනට වෙන විසඳුමක් මට පේන්නේ නෑ. සහ "ඇයි Nuke?" යන ප්‍රශ්නයට පිළිතුර සරලයි - අපි එය රැකියාවේදී භාවිතා කරමු.

එබැවින්, අපගේ විසඳුමේ ෆෝල්ඩරය වෙත යන්න (ව්යාපෘතිය නොවේ), යතුර ඔබාගෙන සිටින්න මාරුව ෆෝල්ඩරයේ හිස් ඉඩක් මත දකුණු-ක්ලික් කරන්න - සන්දර්භය මෙනුවේ අයිතමය තෝරන්න "PowerShell කවුළුව මෙතැනින් විවෘත කරන්න".

අපි Revit/AutoCAD හි විවිධ අනුවාද සඳහා සම්පාදනය සමඟ එක් ප්ලගින ව්‍යාපෘතියක් සාදන්නෙමු

ඔබ එය ස්ථාපනය කර නොමැති නම් න්යෂ්ටික බෝම්බය, පසුව මුලින්ම විධානය ලියන්න

dotnet tool install Nuke.GlobalTool –global

දැන් විධානය ලියන්න න්යෂ්ටික බෝම්බය සහ වින්‍යාස කිරීමට ඔබෙන් විමසනු ඇත න්යෂ්ටික බෝම්බය වත්මන් ව්යාපෘතිය සඳහා. මෙය රුසියානු භාෂාවෙන් වඩාත් නිවැරදිව ලියන්නේ කෙසේදැයි මම නොදනිමි - ඉංග්‍රීසියෙන් එය ලියා ඇත .nuke ගොනුව සොයාගත නොහැක. ඔබට ගොඩනැගීමක් සැකසීමට අවශ්‍යද? [y/n]

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 යතුර එබීමෙන් පසු, අපට සැබෑ හැකර්වරුන් ලෙස හැඟෙනු ඇත, මන්ද, චිත්‍රපටයක මෙන්, අපගේ ව්‍යාපෘතිය විවිධ වින්‍යාසයන් සඳහා ස්වයංක්‍රීයව එකලස් වනු ඇත.

මාර්ගය වන විට, ඔබට Visual Studio වෙතින් කෙලින්ම PowerShell භාවිතා කළ හැක (මෙනුව "දැක්ම»->«වෙනත් කවුළු»->«පැකේජ කළමනාකරු කොන්සෝලය"), නමුත් සෑම දෙයක්ම කළු සහ සුදු වනු ඇත, එය එතරම් පහසු නොවේ.

මෙය මගේ ලිපිය අවසන් කරයි. AutoCAD සඳහා විකල්පය ඔබටම සොයාගත හැකි බව මට විශ්වාසයි. මෙහි ඉදිරිපත් කරන ලද ද්රව්ය එහි "සේවාදායකයින්" සොයා ගනු ඇතැයි මම බලාපොරොත්තු වෙමි.

Спасибо!

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න