Revit/AutoCAD இன் வெவ்வேறு பதிப்புகளுக்கான தொகுப்புடன் ஒரு செருகுநிரல் திட்டத்தை நாங்கள் உருவாக்குகிறோம்

Revit/AutoCAD இன் வெவ்வேறு பதிப்புகளுக்கான தொகுப்புடன் ஒரு செருகுநிரல் திட்டத்தை நாங்கள் உருவாக்குகிறோம்

CAD பயன்பாடுகளுக்கான செருகுநிரல்களை உருவாக்கும் போது (என்னுடைய வழக்கில் இவை AutoCAD, Revit மற்றும் Renga) காலப்போக்கில், ஒரு சிக்கல் தோன்றுகிறது - நிரல்களின் புதிய பதிப்புகள் வெளியிடப்படுகின்றன, அவற்றின் API மாற்றங்கள் மற்றும் செருகுநிரல்களின் புதிய பதிப்புகள் செய்யப்பட வேண்டும்.

உங்களிடம் ஒரே ஒரு செருகுநிரல் இருந்தால் அல்லது இந்த விஷயத்தில் நீங்கள் இன்னும் சுய-கற்பித்த தொடக்கநிலையாளராக இருந்தால், நீங்கள் திட்டத்தின் நகலை உருவாக்கலாம், அதில் தேவையான இடங்களை மாற்றலாம் மற்றும் செருகுநிரலின் புதிய பதிப்பை இணைக்கலாம். அதன்படி, குறியீட்டில் அடுத்தடுத்த மாற்றங்கள் தொழிலாளர் செலவுகளில் பல அதிகரிப்புக்கு வழிவகுக்கும்.

நீங்கள் அனுபவத்தையும் அறிவையும் பெறும்போது, ​​​​இந்த செயல்முறையை தானியக்கமாக்குவதற்கான பல வழிகளைக் காணலாம். நான் இந்த பாதையில் நடந்தேன், நான் என்ன முடிந்தது, அது எவ்வளவு வசதியானது என்பதை நான் உங்களுக்கு சொல்ல விரும்புகிறேன்.

முதலில், வெளிப்படையான மற்றும் நான் நீண்ட காலமாகப் பயன்படுத்திய ஒரு முறையைப் பார்ப்போம்.

திட்ட கோப்புகளுக்கான இணைப்புகள்

எல்லாவற்றையும் எளிமையாகவும், காட்சியாகவும், புரிந்துகொள்ளக்கூடியதாகவும் மாற்ற, சொருகி மேம்பாட்டின் சுருக்கமான உதாரணத்தைப் பயன்படுத்தி எல்லாவற்றையும் விவரிக்கிறேன்.

விஷுவல் ஸ்டுடியோவைத் திறந்து (என்னிடம் சமூகம் 2019 பதிப்பு உள்ளது. ஆம் - ரஷ்ய மொழியில்) புதிய தீர்வை உருவாக்குவோம். அவரை அழைப்போம் MySuperPluginForRevit

Revit/AutoCAD இன் வெவ்வேறு பதிப்புகளுக்கான தொகுப்புடன் ஒரு செருகுநிரல் திட்டத்தை நாங்கள் உருவாக்குகிறோம்

2015-2020 பதிப்புகளுக்கான Revitக்கான செருகுநிரலை உருவாக்குவோம். எனவே, தீர்வு (நெட் ஃபிரேம்வொர்க் கிளாஸ் லைப்ரரி) இல் ஒரு புதிய திட்டத்தை உருவாக்கி அதை அழைப்போம் MySuperPluginForRevit_2015

Revit/AutoCAD இன் வெவ்வேறு பதிப்புகளுக்கான தொகுப்புடன் ஒரு செருகுநிரல் திட்டத்தை நாங்கள் உருவாக்குகிறோம்

Revit APIக்கு இணைப்புகளைச் சேர்க்க வேண்டும். நிச்சயமாக, உள்ளூர் கோப்புகளுக்கான இணைப்புகளைச் சேர்க்கலாம் (தேவையான அனைத்து SDKகள் அல்லது Revit இன் அனைத்து பதிப்புகளையும் நாங்கள் நிறுவ வேண்டும்), ஆனால் நாங்கள் உடனடியாக சரியான பாதையைப் பின்பற்றி NuGet தொகுப்பை இணைப்போம். நீங்கள் சில தொகுப்புகளைக் காணலாம், ஆனால் நான் எனது சொந்தத்தைப் பயன்படுத்துவேன்.

தொகுப்பை இணைத்த பிறகு, உருப்படி மீது வலது கிளிக் செய்யவும் "குறிப்புகள்"மற்றும் உருப்படியைத் தேர்ந்தெடுக்கவும்"தொகுப்புகள்.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 இலிருந்து எங்கள் செருகுநிரல் ஏதாவது ஒன்றைப் பயன்படுத்தும் என்று உடனடியாக கற்பனை செய்வோம். சரி, அல்லது நாம் சொருகி செய்யும் ரெவிட் பதிப்பைப் பொறுத்து குறியீட்டில் ஏதாவது மாற்ற வேண்டும். குறியீட்டில் இத்தகைய வேறுபாடுகளைத் தீர்க்க, நாங்கள் நிபந்தனை தொகுப்பு சின்னங்களைப் பயன்படுத்துவோம். திட்ட பண்புகளைத் திறந்து, "தாவலுக்குச் செல்லவும்சட்டசபை"மற்றும் களத்தில்"நிபந்தனை தொகுத்தல் குறியீடு"எழுதுவோம் R2015.

Revit/AutoCAD இன் வெவ்வேறு பதிப்புகளுக்கான தொகுப்புடன் ஒரு செருகுநிரல் திட்டத்தை நாங்கள் உருவாக்குகிறோம்

பிழைத்திருத்தம் மற்றும் வெளியீட்டு உள்ளமைவுகள் இரண்டிற்கும் குறியீடு சேர்க்கப்பட வேண்டும் என்பதை நினைவில் கொள்ளவும்.

சரி, நாம் பண்புகள் சாளரத்தில் இருக்கும்போது, ​​​​உடனடியாக "தாவலுக்குச் செல்கிறோம்விண்ணப்ப"மற்றும் களத்தில்"இயல்புநிலை பெயர்வெளி» பின்னொட்டை நீக்கவும் _2015அதனால் எங்கள் பெயர்வெளி உலகளாவியது மற்றும் சட்டசபை பெயரிலிருந்து சுயாதீனமானது:

Revit/AutoCAD இன் வெவ்வேறு பதிப்புகளுக்கான தொகுப்புடன் ஒரு செருகுநிரல் திட்டத்தை நாங்கள் உருவாக்குகிறோம்

என் விஷயத்தில், இறுதி தயாரிப்பில், அனைத்து பதிப்புகளின் செருகுநிரல்களும் ஒரே கோப்புறையில் வைக்கப்படுகின்றன, எனவே எனது சட்டசபை பெயர்கள் படிவத்தின் பின்னொட்டுடன் இருக்கும் _20xx. ஆனால் கோப்புகள் வெவ்வேறு கோப்புறைகளில் அமைந்திருக்க வேண்டும் என்றால், சட்டசபை பெயரிலிருந்து பின்னொட்டையும் நீக்கலாம்.

கோப்புக் குறியீட்டிற்குச் செல்வோம் Class1.cs ரெவிட்டின் வெவ்வேறு பதிப்புகளை கணக்கில் எடுத்துக்கொண்டு, அங்கு சில குறியீட்டை உருவகப்படுத்தவும்:

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 க்கு மேலே உள்ள ரெவிட் இன் அனைத்து பதிப்புகளையும் நான் உடனடியாக கணக்கில் எடுத்துக்கொண்டேன் (அவை எழுதும் நேரத்தில் கிடைத்தன) மற்றும் அதே டெம்ப்ளேட்டைப் பயன்படுத்தி உருவாக்கப்பட்ட நிபந்தனை தொகுப்பு சின்னங்கள் இருப்பதை உடனடியாக கணக்கில் எடுத்துக்கொண்டேன்.

முக்கிய சிறப்பம்சத்திற்கு செல்லலாம். ரெவிட் 2016 க்கான செருகுநிரலின் பதிப்பிற்கு மட்டுமே நாங்கள் ஒரு புதிய திட்டத்தை உருவாக்குகிறோம். மேலே விவரிக்கப்பட்ட அனைத்து படிகளையும் முறையே மீண்டும் செய்கிறோம், 2015 எண்ணை 2016 என்ற எண்ணுடன் மாற்றுகிறோம். ஆனால் கோப்பு Class1.cs புதிய திட்டத்திலிருந்து நீக்கவும்.

Revit/AutoCAD இன் வெவ்வேறு பதிப்புகளுக்கான தொகுப்புடன் ஒரு செருகுநிரல் திட்டத்தை நாங்கள் உருவாக்குகிறோம்

தேவையான குறியீடு கொண்ட கோப்பு - Class1.cs - எங்களிடம் ஏற்கனவே உள்ளது மற்றும் புதிய திட்டத்தில் அதற்கான இணைப்பைச் செருக வேண்டும். இணைப்புகளைச் செருக இரண்டு வழிகள் உள்ளன:

  1. நீளமானது - திட்டத்தில் வலது கிளிக் செய்து "" என்பதைத் தேர்ந்தெடுக்கவும்சேர்»->«இருக்கும் உறுப்பு", திறக்கும் சாளரத்தில், தேவையான கோப்பைக் கண்டறியவும் மற்றும் விருப்பத்திற்கு பதிலாக "சேர்"விருப்பத்தைத் தேர்ந்தெடு"இணைப்பாகச் சேர்க்கவும்»

Revit/AutoCAD இன் வெவ்வேறு பதிப்புகளுக்கான தொகுப்புடன் ஒரு செருகுநிரல் திட்டத்தை நாங்கள் உருவாக்குகிறோம்

  1. குறுகிய - நேரடியாக தீர்வு எக்ஸ்ப்ளோரரில், விரும்பிய கோப்பை (அல்லது கோப்புகள் அல்லது முழு கோப்புறைகளும் கூட) தேர்ந்தெடுத்து, Alt விசையை அழுத்திப் பிடிக்கும்போது புதிய திட்டத்திற்கு இழுக்கவும். நீங்கள் இழுக்கும்போது, ​​​​Alt விசையை அழுத்தும்போது, ​​​​மவுஸ் கர்சர் ஒரு கூட்டல் குறியிலிருந்து அம்புக்குறியாக மாறும்.
    யு பி எஸ்: இந்த பத்தியில் நான் ஒரு சிறிய குழப்பத்தை ஏற்படுத்தினேன் - பல கோப்புகளை மாற்ற நீங்கள் அழுத்திப் பிடிக்க வேண்டும் Shift + Alt!

செயல்முறையை மேற்கொண்ட பிறகு, இரண்டாவது திட்டத்தில் ஒரு கோப்பு இருக்கும் Class1.cs தொடர்புடைய ஐகானுடன் (நீல அம்பு):

Revit/AutoCAD இன் வெவ்வேறு பதிப்புகளுக்கான தொகுப்புடன் ஒரு செருகுநிரல் திட்டத்தை நாங்கள் உருவாக்குகிறோம்

எடிட்டர் சாளரத்தில் குறியீட்டைத் திருத்தும் போது, ​​குறியீட்டைக் காண்பிக்கும் திட்டச் சூழலையும் நீங்கள் தேர்வு செய்யலாம், இது வெவ்வேறு நிபந்தனை தொகுப்பு சின்னங்களின் கீழ் குறியீடு திருத்தப்படுவதைக் காண உங்களை அனுமதிக்கும்:

Revit/AutoCAD இன் வெவ்வேறு பதிப்புகளுக்கான தொகுப்புடன் ஒரு செருகுநிரல் திட்டத்தை நாங்கள் உருவாக்குகிறோம்

இந்தத் திட்டத்தைப் பயன்படுத்தி மற்ற எல்லா திட்டங்களையும் (2017-2020) உருவாக்குகிறோம். லைஃப் ஹேக் - நீங்கள் தீர்வு எக்ஸ்ப்ளோரரில் உள்ள கோப்புகளை அடிப்படை திட்டத்திலிருந்து அல்ல, ஆனால் அவை ஏற்கனவே இணைப்பாகச் செருகப்பட்ட திட்டத்திலிருந்து இழுத்தால், நீங்கள் Alt விசையை அழுத்திப் பிடிக்க வேண்டியதில்லை!

சொருகியின் புதிய பதிப்பைச் சேர்க்கும் தருணம் வரை அல்லது திட்டத்தில் புதிய கோப்புகளைச் சேர்க்கும் தருணம் வரை விவரிக்கப்பட்ட விருப்பம் மிகவும் நல்லது - இவை அனைத்தும் மிகவும் கடினமானதாக மாறும். சமீபத்தில் நான் திடீரென்று ஒரு திட்டத்துடன் அனைத்தையும் எவ்வாறு வரிசைப்படுத்துவது என்பதை உணர்ந்தேன், நாங்கள் இரண்டாவது முறைக்கு செல்கிறோம்

அமைப்புகளின் மந்திரம்

இங்கே படித்து முடித்த பிறகு, "கட்டுரை உடனடியாக இரண்டாவது முறையைப் பற்றியதாக இருந்தால், முதல் முறையை ஏன் விவரித்தீர்கள்?!" நமக்கு ஏன் நிபந்தனை தொகுத்தல் சின்னங்கள் தேவை மற்றும் எந்தெந்த இடங்களில் எங்கள் திட்டங்கள் வேறுபடுகின்றன என்பதை தெளிவுபடுத்த எல்லாவற்றையும் விவரித்தேன். ஒரு திட்டத்தை மட்டும் விட்டுவிட்டு, நாம் செயல்படுத்த வேண்டிய திட்டங்களில் என்ன வேறுபாடுகள் உள்ளன என்பது இப்போது தெளிவாகிறது.

எல்லாவற்றையும் இன்னும் தெளிவாக்க, நாங்கள் புதிய திட்டத்தை உருவாக்க மாட்டோம், ஆனால் முதல் வழியில் உருவாக்கப்பட்ட எங்கள் தற்போதைய திட்டத்தில் மாற்றங்களைச் செய்வோம்.

எனவே, முதலில், முக்கிய ஒன்றைத் தவிர (கோப்புகளை நேரடியாகக் கொண்டிருக்கும்) தீர்வுகளிலிருந்து அனைத்து திட்டங்களையும் அகற்றுவோம். அந்த. 2016-2020 பதிப்புகளுக்கான திட்டங்கள். தீர்வுடன் கோப்புறையைத் திறந்து, இந்த திட்டங்களின் கோப்புறைகளை நீக்கவும்.

எங்கள் முடிவில் ஒரு திட்டம் உள்ளது - MySuperPluginForRevit_2015. அதன் பண்புகளைத் திறந்து:

  1. தாவலில் "விண்ணப்ப"அசெம்பிளி பெயரிலிருந்து பின்னொட்டை நீக்கவும் _2015 (ஏன் என்பது பின்னர் புரியும்)
  2. தாவலில் "சட்டசபை» நிபந்தனை தொகுப்பு சின்னத்தை அகற்றவும் R2015 தொடர்புடைய துறையில் இருந்து

குறிப்பு: விஷுவல் ஸ்டுடியோவின் சமீபத்திய பதிப்பில் பிழை உள்ளது - திட்ட பண்புகள் சாளரத்தில் நிபந்தனைக்குட்பட்ட தொகுப்பு சின்னங்கள் காட்டப்படாது, இருப்பினும் அவை கிடைக்கின்றன. இந்த தடுமாற்றத்தை நீங்கள் சந்தித்தால், அவற்றை .csproj கோப்பிலிருந்து கைமுறையாக அகற்ற வேண்டும். இருப்பினும், நாம் இன்னும் அதில் வேலை செய்ய வேண்டும், எனவே படிக்கவும்.

பின்னொட்டை அகற்றுவதன் மூலம் தீர்வு எக்ஸ்ப்ளோரர் சாளரத்தில் திட்டத்தை மறுபெயரிடவும் _2015 பின்னர் தீர்விலிருந்து திட்டத்தை அகற்றவும். பரிபூரணவாதிகளின் ஒழுங்கையும் உணர்வுகளையும் பராமரிக்க இது அவசியம்! எங்கள் தீர்வின் கோப்புறையைத் திறந்து, திட்ட கோப்புறையை அதே வழியில் மறுபெயரிட்டு, திட்டத்தை மீண்டும் தீர்வுக்குள் ஏற்றுவோம்.

உள்ளமைவு மேலாளரைத் திறக்கவும். அமெரிக்க கட்டமைப்பு வெளியீட்டு கொள்கையளவில், இது தேவையில்லை, எனவே அதை நீக்குவோம். ஏற்கனவே நமக்குத் தெரிந்த பெயர்களைக் கொண்டு புதிய கட்டமைப்புகளை உருவாக்குகிறோம் R2015, R2016,…, R2020. நீங்கள் மற்ற உள்ளமைவுகளிலிருந்து அமைப்புகளை நகலெடுக்க வேண்டிய அவசியமில்லை மற்றும் திட்ட கட்டமைப்புகளை உருவாக்க வேண்டிய அவசியமில்லை என்பதை நினைவில் கொள்ளவும்:

Revit/AutoCAD இன் வெவ்வேறு பதிப்புகளுக்கான தொகுப்புடன் ஒரு செருகுநிரல் திட்டத்தை நாங்கள் உருவாக்குகிறோம்

திட்டத்துடன் கோப்புறைக்குச் சென்று, உங்களுக்கு வசதியான எடிட்டரில் .csproj நீட்டிப்புடன் கோப்பைத் திறக்கவும். மூலம், நீங்கள் அதை விஷுவல் ஸ்டுடியோவிலும் திறக்கலாம் - நீங்கள் திட்டத்தை இறக்க வேண்டும், பின்னர் விரும்பிய உருப்படி சூழல் மெனுவில் இருக்கும்:

Revit/AutoCAD இன் வெவ்வேறு பதிப்புகளுக்கான தொகுப்புடன் ஒரு செருகுநிரல் திட்டத்தை நாங்கள் உருவாக்குகிறோம்

விஷுவல் ஸ்டுடியோவில் எடிட்டிங் செய்வது விரும்பத்தக்கது, ஏனெனில் எடிட்டர் இரண்டும் சீரமைத்து கேட்கும்.

கோப்பில் கூறுகளைக் காண்போம் சொத்துக் குழு - மிக மேலே பொதுவானது, பின்னர் நிபந்தனைகள் வரும். இந்த கூறுகள் திட்டம் கட்டப்படும்போது அதன் பண்புகளை அமைக்கின்றன. நிபந்தனைகள் இல்லாத முதல் உறுப்பு, பொதுவான பண்புகளை அமைக்கிறது, மற்றும் நிபந்தனைகளுடன் கூடிய உறுப்புகள், அதன்படி, கட்டமைப்புகளைப் பொறுத்து சில பண்புகளை மாற்றுகின்றன.

பொதுவான (முதல்) உறுப்புக்குச் செல்லவும் சொத்துக் குழு மற்றும் சொத்தைப் பாருங்கள் சட்டசபை பெயர் - இது சட்டசபையின் பெயர் மற்றும் பின்னொட்டு இல்லாமல் இருக்க வேண்டும் _2015. பின்னொட்டு இருந்தால், அதை அகற்றவும்.

நிபந்தனையுடன் ஒரு உறுப்பைக் கண்டறிதல்

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

எங்களுக்கு இது தேவையில்லை - நாங்கள் அதை நீக்குகிறோம்.

நிபந்தனையுடன் கூடிய உறுப்பு

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

குறியீடு உருவாக்கம் மற்றும் பிழைத்திருத்தத்தின் கட்டத்தில் வேலை செய்ய வேண்டும். உங்கள் தேவைகளுக்கு ஏற்ப அதன் பண்புகளை நீங்கள் மாற்றலாம் - வெவ்வேறு வெளியீட்டு பாதைகளை அமைக்கவும், நிபந்தனை தொகுப்பு சின்னங்களை மாற்றவும்.

இப்போது புதிய கூறுகளை உருவாக்குவோம் சொத்துக் குழு எங்கள் அமைப்புகளுக்கு. இந்த உறுப்புகளில் நாம் நான்கு பண்புகளை அமைக்க வேண்டும்:

  • அவுட்புட்பாத் - வெளியீடு கோப்புறை. நான் இயல்புநிலை மதிப்பை அமைத்தேன் binR20xx
  • கான்ஸ்டான்ட்களை வரையறுக்கவும் - நிபந்தனை தொகுப்பு சின்னங்கள். மதிப்பு குறிப்பிடப்பட வேண்டும் TRACE;R20xx
  • TargetFramework பதிப்பு - இயங்குதள பதிப்பு. Revit API இன் வெவ்வேறு பதிப்புகளுக்கு வெவ்வேறு தளங்கள் குறிப்பிடப்பட வேண்டும்.
  • சட்டசபை பெயர் - சட்டசபை பெயர் (அதாவது கோப்பு பெயர்). நீங்கள் சட்டசபையின் சரியான பெயரை எழுதலாம், ஆனால் பல்துறைக்கு மதிப்பை எழுத பரிந்துரைக்கிறேன் $(AssemblyName)_20хх. இதைச் செய்ய, சட்டசபை பெயரிலிருந்து பின்னொட்டை அகற்றினோம்

இந்த அனைத்து கூறுகளின் மிக முக்கியமான அம்சம் என்னவென்றால், அவற்றை மாற்றாமல் மற்ற திட்டங்களுக்கு நகலெடுக்க முடியும். பின்னர் கட்டுரையில் .csproj கோப்பின் அனைத்து உள்ளடக்கங்களையும் இணைக்கிறேன்.

சரி, திட்டத்தின் பண்புகளை நாங்கள் கண்டுபிடித்துள்ளோம் - இது கடினம் அல்ல. ஆனால் செருகுநிரல் நூலகங்களை (NuGet தொகுப்புகள்) என்ன செய்வது. நாம் மேலும் பார்த்தால், இதில் உள்ள நூலகங்கள் உறுப்புகளில் குறிப்பிடப்பட்டிருப்பதைக் காணலாம் பொருள் குழு. ஆனால் துரதிர்ஷ்டம் - இந்த உறுப்பு ஒரு உறுப்பு என நிலைமைகளை தவறாக செயலாக்குகிறது சொத்துக் குழு. ஒருவேளை இது ஒரு விஷுவல் ஸ்டுடியோ தடுமாற்றமாக இருக்கலாம், ஆனால் நீங்கள் பல கூறுகளைக் குறிப்பிட்டால் பொருள் குழு கட்டமைப்பு நிபந்தனைகளுடன், மற்றும் உள்ளே 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 இன் வெவ்வேறு பதிப்புகளுக்கான தொகுப்புடன் ஒரு செருகுநிரல் திட்டத்தை நாங்கள் உருவாக்குகிறோம்

இந்த கட்டத்தில் நான் ஒரு முட்டுச்சந்திற்கு வந்தேன் - அனைத்து உள்ளமைவுகளையும் ஒரே நேரத்தில் சேகரிக்க, நாங்கள் தொகுதி சட்டசபையைப் பயன்படுத்தலாம் (மெனு "சட்டசபை»->«தொகுதி உருவாக்கம்"), ஆனால் கட்டமைப்புகளை மாற்றும்போது, ​​தொகுப்புகள் தானாக மீட்டமைக்கப்படாது. திட்டத்தைச் சேகரிக்கும் போது, ​​​​இதுவும் நடக்காது, இருப்பினும், கோட்பாட்டில், அது வேண்டும். நிலையான வழிமுறைகளைப் பயன்படுத்தி இந்த சிக்கலுக்கு நான் தீர்வு காணவில்லை. மேலும் இது ஒரு விஷுவல் ஸ்டுடியோ பிழையாகவும் இருக்கலாம்.

எனவே, தொகுதி சட்டசபைக்கு, ஒரு சிறப்பு தானியங்கி சட்டசபை அமைப்பைப் பயன்படுத்த முடிவு செய்யப்பட்டது அணுசக்தி. நான் உண்மையில் இதை விரும்பவில்லை, ஏனென்றால் சொருகி மேம்பாட்டின் அடிப்படையில் இது மிகைப்படுத்தப்பட்டதாக நான் நினைக்கிறேன், ஆனால் தற்போது வேறு எந்த தீர்வையும் நான் காணவில்லை. மேலும் “ஏன் அணுஉலை?” என்ற கேள்விக்கு பதில் எளிது - நாங்கள் அதை வேலையில் பயன்படுத்துகிறோம்.

எனவே, எங்கள் தீர்வின் கோப்புறைக்குச் செல்லவும் (திட்டம் அல்ல), விசையை அழுத்திப் பிடிக்கவும் ஷிப்ட் கோப்புறையில் உள்ள வெற்று இடத்தில் வலது கிளிக் செய்யவும் - சூழல் மெனுவில் உருப்படியைத் தேர்ந்தெடுக்கவும் "இங்கே 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"));
            }
        });
}

நாங்கள் பவர்ஷெல் சாளரத்திற்குத் திரும்பி மீண்டும் கட்டளையை எழுதுகிறோம் அணு (நீங்கள் கட்டளையை எழுதலாம் அணு தேவையானதைக் குறிக்கிறது இலக்கு. ஆனால் எங்களிடம் ஒன்று உள்ளது இலக்கு, இது இயல்பாக இயங்கும்). Enter விசையை அழுத்திய பிறகு, நாங்கள் உண்மையான ஹேக்கர்களைப் போல உணர்வோம், ஏனென்றால், ஒரு திரைப்படத்தைப் போல, எங்கள் திட்டம் வெவ்வேறு கட்டமைப்புகளுக்கு தானாகவே கூடியிருக்கும்.

மூலம், விஷுவல் ஸ்டுடியோவில் இருந்து நேரடியாக PowerShell ஐப் பயன்படுத்தலாம் (மெனு "பார்வை»->«மற்ற ஜன்னல்கள்»->«தொகுப்பு மேலாளர் பணியகம்"), ஆனால் எல்லாம் கருப்பு மற்றும் வெள்ளை நிறத்தில் இருக்கும், இது மிகவும் வசதியானது அல்ல.

இத்துடன் எனது கட்டுரை முடிவடைகிறது. ஆட்டோகேட் விருப்பத்தை நீங்களே கண்டுபிடிக்க முடியும் என்று நான் நம்புகிறேன். இங்கே வழங்கப்பட்ட பொருள் அதன் "வாடிக்கையாளர்களை" கண்டுபிடிக்கும் என்று நம்புகிறேன்.

உங்கள் கவனத்திற்கு நன்றி!

ஆதாரம்: www.habr.com

கருத்தைச் சேர்