CAD á¡ááá®áá±ážááŸááºážáá»á¬ážá¡ááœáẠááááºá¡ááºáá»á¬ážááᯠáá®ááœááºááá·áºá¡áá« (
ááá·áºááœáẠááááºá¡ááºáá áºáá¯áᬠááŸáááẠááá¯á·ááá¯áẠá€ááá á¹á á¡ááœáẠááá¯ááºááá¯áẠáááºááŒá¬ážáá±ážááá·áº á¡á ááŒá¯áá° ááŒá áºáá±áá«áá áááºááẠááá±á¬áá»ááºá áááá¹áá°ááᯠááá¯ážááŸááºážá áœá¬ ááŒá¯áá¯ááºááá¯ááºááŒá®áž áááºážááœáẠááá¯á¡ááºáá±á¬ áá±áá¬áá»á¬ážááᯠááŒá±á¬ááºážáá²áᬠplugin áá¬ážááŸááºážá¡áá áºááᯠá á¯á ááºážááá¯ááºáá«áááºá ááá¯á·ááŒá±á¬áá·áºá áá¯ááºááá±á¬ááºáááºááœá²ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááẠá¡áá¯ááºááá¬ážá ááááºáá»á¬áž á¡áá»á¬ážá¡ááŒá¬ážááá¯ážáá¬áááºááŒá áºáááºá
á¡ááœá±á·á¡ááŒá¯á¶ááŸáá·áº ááá¯áá¯ááá»á¬ážáááŸááá¬áááºááŸáá·áºá¡áá»áŸ á€áá¯ááºáááºážá ááºááᯠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºááẠáááºážáááºážáá»á¬ážá áœá¬ááᯠáááºááœá±á·áááá·áºáááºá áá« áá®áááºážááᯠáá»áŸá±á¬ááºáá²á·ááŒá®áž áá«áááºááá¯á¡áá¯á¶ážáááºááŒá®áž áááºááá¯á¡áááºááŒá±áááºááá¯áᬠáááºážááá¯ááŒá±á¬ááŒáá»ááºáááºá
áŠážá áœá¬ áááá¬áááºááŸá¬ážááŒá®áž á¡áá»áááºá¡áá±á¬áºááŒá¬ á¡áá¯á¶ážááŒá¯áá²á·ááá·áº áááºážáááºážááᯠááŒáá·áºááŒáá«á áá¯á·á
ááá±á¬áá»ááºááá¯ááºáá»á¬ážááá¯á· ááá·áºááºáá»á¬áž
á¡áá¬á¡á¬ážáá¯á¶ážááᯠááá¯ážááá¯ážááŸááºážááŸááºážá á¡ááŒááºá¡á¬áá¯á¶ááŸáá·áº áá¬ážáááºááá¯ááºá á±áááºá plugin ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á á ááá¹ááááá°áá¬ááᯠá¡áá¯á¶ážááŒá¯á á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá±á¬áºááŒáá«áááºá
Visual Studio ááá¯ááœáá·áºááŒáá«á áá¯á· (áá»áœááºá¯ááºááœáẠCommunity 2019 áá¬ážááŸááºážááŸááááºá áá¯ááºáá²á· - áá¯ááŸá¬ážáá¬áá¬ááŒáá·áº) ááŸáá·áº ááŒá±ááŸááºážáá»ááºá¡áá áºáá áºáá¯ááᯠáááºáá®ážááŒáá«á áá¯á·á áá°á·ááá¯áá±á«áºáá¡á±á¬áẠMySuperPluginForRevit
2015-2020 áá¬ážááŸááºážáá»á¬ážá¡ááœáẠRevit á¡ááœáẠááááºá¡ááºáá áºáᯠááŒá¯áá¯ááºáá«áááºá ááá¯á·ááŒá±á¬áá·áºá ááŒá±ááŸááºážáá»áẠ(Net Framework Class Library) ááœáẠááá±á¬áá»ááºá¡áá áºáá áºáá¯ááᯠáááºáá®ážááŒá®áž áááºážááᯠáá±á«áºááŒáá«á áá¯á· MySuperPluginForRevit_2015
Revit API ááá¯á· ááá·áºááºáá»á¬ážááá·áºááẠááá¯á¡ááºáá«áááºá áá¯ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáá±áááá¯ááºáá¬ááá¯ááºáá»á¬ážááá¯á· ááá·áºááºáá»á¬ážááᯠáá±á«ááºážááá·áºááá¯ááºááẠ(áá»áœááºá¯ááºááá¯á·ááẠááá¯á¡ááºáá±á¬ SDKs ááá¯á·ááá¯áẠRevit áá¬ážááŸááºážá¡á¬ážáá¯á¶ážááᯠááá·áºááœááºážááẠááá¯á¡ááºáá«áááº)á ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááẠááŸááºáááºáá±á¬áááºážááŒá±á¬ááºážá¡ááá¯ááºáž áá»ááºááŒááºážáá¯ááºáá±á¬ááºááŒá®áž NuGet á¡áá¯ááºááᯠáá»áááºáááºáá«áááºá áááºáá±á·áá»áºá¡áááºážáááºááᯠáááºááŸá¬ááœá±á·ááá¯ááºáá±á¬áºáááºáž áá»áœááºá¯ááºááẠáá»áœááºá¯ááºáááá¯ááºááá¯ááºááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
áááºáá±á·áá»áºááá¯áá»áááºáááºááŒá®ážáá±á¬ááºá item áá±á«áºááœáẠright-click ááŸáááºáá«áááá¯ážáá¬áž"ááŒá®ážâáá±á¬á· áá á¹á ááºážááá¯âááœá±ážáá«"packages.config ááᯠPackageReference ááá¯á· ááœáŸá±á·áá«...»
á¡áááºá á€á¡áá»ááºááœáẠááẠáá¯ááºáááẠááááºááá·áºááœá¬ážáá«áá package properties window ááœáẠá¡áá±ážááŒá®ážáá±á¬á¡áᬠáááŸááá±á¬á·áá±á¬ááŒá±á¬áá·áº "ááŒááºááœááºážááŸá¬ áá°ážáá°áá«áâáá»áááºážáá±áááºááá¯áž áááºááŸááºááá¯á· ááá¯áááºá áááŸááºáá±á¬ááá¯á·áá±á¬áẠáááááºááá·áºáá«ááŸáá·áº - ááá±á¬áá»ááºááŸáá·áºá¡áá° ááá¯ááºááœá²ááá¯á·ááœá¬ážáá«á ááá·áºá¡ááœáẠá¡áááºááŒá±áá±á¬ áááºážááŒááºáá°ááŸá .csproj ááá¯ážáá»á²á·ááŸá¯ááŒáá·áº ááá¯ááºááá¯ááœáá·áºáá« (áá»áœááºáá±á¬áº Notepad++ áá¯á¶ážáááº) ááŸáá·áº áá»áœááºá¯ááºááá¯á·ááááºáá±á·áá»áºááŸáá·áºáááºáááºáá±á¬ ááá·áºááœááºážááŸá¯ááᯠááŸá¬áá«á áá°á ááá¯áá¯á¶ááááº
<PackageReference Include="ModPlus.Revit.API.2015">
<Version>1.0.0</Version>
</PackageReference>
áááºážááœáẠáá á¹á ááºážáá áºáá¯ááá·áºáá«á runtime. á€áá²á·ááá¯á· ááœááºáá±á«áºáá¬áááá·áºáááº-
<PackageReference Include="ModPlus.Revit.API.2015">
<Version>1.0.0</Version>
<ExcludeAssets>runtime</ExcludeAssets>
</PackageReference>
ááá¯á ááá±á¬áá»ááºáá
áºáá¯áááºáá±á¬ááºáá±á¬á¡áá«á á¡áá¯ááºááŸááá¯ááºáá»á¬ážááᯠá¡ááœááºááá¯ááºááœá²ááá¯á· áá°ážáá°áááºááá¯ááºáá«á
áá±á¬ááºáááºááœá¬ážááŒáá«á
áá¯á· - áá»áœááºá¯ááºááá¯á·áááááºá¡ááºááẠáá¬ážááŸááºážá¡áá
áºáá»á¬ážááœááºááŸááá¬áá±á¬á¡áá« á¡áá»áááºááŸáá·áºá¡áá»áŸ ááŒá±á¬ááºážáá²ááœá¬ážááá·áº Revit API á០áá
áºáá¯áá¯ááᯠá¡áá¯á¶ážááŒá¯áááºáᯠáá»ááºáá»ááºážá
áááºáá°ážááŒáá·áºááŒáá«á
áá¯á·á ááá¯á·ááá¯ááºáá«á áá»áœááºá¯ááºááá¯á·ááẠplugin ááá¯ááŒá¯áá¯ááºáá±ááá·áº Revit áá¬ážááŸááºážáá±á«áºáá°áááºá áá¯ááºáá²ááœáẠáá
áºáá¯áá¯ááᯠááŒá±á¬ááºážáá²ááẠááá¯á¡ááºáá«áááºá áá¯ááºááœáẠááœá²ááŒá¬ážááŸá¯áá»á¬ážááᯠááŒá±ááŸááºážáááºá á¡ááŒá±á¡áá±á¡ááá¯áẠá
á¯á
ááºážááŸá¯áááºá¹áá±ááá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá ááá±á¬áá»ááºáá¯ááºááá¹áááá»á¬ážááá¯ááœáá·áºáá«á â tab ááá¯ááœá¬ážáá«áá¡á
ááºážá¡áá±áž"ááœááºážáá²ááŸá¬"Conditional compilation á¡ááŸááºá¡áá¬áž"áá±ážááŒáá¡á±á¬áẠR2015.
Debug ááŸáá·áº Release configurations ááŸá áºáá¯áá¯á¶ážá¡ááœáẠáááºá¹áá±áááᯠááá·áºááááºááᯠáááááŒá¯áá«á
áá±á¬ááºážááŒá®á áá»áœááºá¯ááºááá¯á·ááẠProperties Window ááœááºááŸááá±á ááºá áá»áœááºá¯ááºááá¯á·ááẠâtabâ ááᯠáá»ááºáá»ááºážááœá¬ážáá«áááŒáŸá±á¬áá»ááŸá¬"ááœááºážáá²ááŸá¬"áá°áááºážá¡áááºáá±áá¬Â» áá±á¬ááºáááºááœá²ááᯠáááºááŸá¬ážáá«á _2015ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·á namespace ááẠá ááŒáá á¬ááŒá áºááŒá®áž á ááºážáá±ážááœá²á¡áááºá០áá®ážááŒá¬ážááŒá áºáá±á á±áááºá
áá»áœááºá¯ááºáááá á¹á ááœááºá áá±á¬ááºáá¯á¶ážáá¯ááºáá¯ááºááœááºá áá¬ážááŸááºážá¡á¬ážáá¯á¶ážá plugins áá»á¬ážááᯠááá¯ááºááœá²áá áºáá¯áá²ááœáẠááá·áºááœááºážáá¬ážáá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºá á á¯áá±ážááŸá¯á¡áááºáá»á¬ážááẠáá±á¬ááºááá±á¬ááºáááºááœá²ááœáẠááŸááá±áá«áááºá _20Ñ Ñ . ááá¯á·áá±á¬áº ááá¯ááºáá»á¬ážááᯠááá°áá®áá±á¬ ááá¯ááºááœá²áá»á¬ážááœáẠáá¬ážááŸáááá·áºáááºááá¯áá«á áá±á¬ááºáááºááœá²ááᯠááááááºá¡áááºá០áááºááŸá¬ážááá¯ááºáááºá
ááá¯ááºáá¯ááºááᯠááœá¬ážááŒáá·áºáá¡á±á¬áẠ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;
}
}
}
áá»áœááºá¯ááºááẠRevit áá¬ážááŸááºáž 2015 á¡áááºáá¬ážááŸááºážá¡á¬ážáá¯á¶ážááᯠ(á á¬áá±ážáá»áááºá áááŸáááá¯ááºáá±á¬) áá¬ážááŸááºážá¡á¬ážáá¯á¶ážááᯠááá·áºááœááºážá ááºážá á¬ážááŒá®áž áá°áá®áá±á¬áá¯á¶á á¶áááááºááᯠá¡áá¯á¶ážááŒá¯á áááºáá®ážáá¬ážááá·áº á¡ááŒá±á¡áá±á¡ááá¯ááºá á¯á ááºážááŸá¯áááºá¹áá±ááá»á¬áž ááŸááá±ááŒááºážááᯠáá»ááºáá»ááºážááá·áºááœááºážá ááºážá á¬ážáá²á·áááºá
áááºááá®ážáá±á¬ááºážááá¯ážááŒááá¯á· áááºááœá¬ážááŒáá«á áá¯á·á Revit 2016 á¡ááœáẠplugin áá¬ážááŸááºážá¡ááœááºáᬠáá»áœááºá¯ááºááá¯á·áááŒá±ááŸááºážáá»ááºááœáẠááá±á¬áá»ááºá¡áá áºáá áºáá¯ááᯠáááºáá®ážáá«áááºá á¡áááºáá±á¬áºááŒáá«á¡ááá·áºá¡á¬ážáá¯á¶ážááᯠá¡áá®ážáá®ážááŒááºáá¯ááºáᬠ2015 áá¶áá«ááºááᯠ2016 áá¶áá«ááºááŒáá·áº á¡á á¬ážááá¯ážáá«áááºá ááá¯á·áá±á¬áº ááá¯áẠClass1.cs ááá±á¬áá»ááºá¡áá áºá០áá»ááºáá«á
ááá¯á¡ááºáá±á¬áá¯ááºááŸáá·áºá¡áá° ááá¯ááº- Class1.cs - áá»áœááºáá±á¬áºááá¯á·ááŸá¬ ááŸáááŒá®ážáá¬ážááŒá áºááŒá®áž ááá±á¬áá»ááºá¡áá áºáá áºáá¯ááŸá¬ áááºážááᯠááá·áºááºáá áºáá¯ááá·áºááá¯á· ááá¯áá«áááºá ááá·áºááºáá»á¬ážááᯠááá·áºááœááºážááẠáááºážáááºážááŸá áºáá¯ááŸááááºá
- ááŸááºáááºá - ááá±á¬áá»ááºááᯠright-click ááŸáááºááŒá®áž "áá±á«ááºáž"->"ááŸáááŒá®ážáá¬ážááŒááºá ááº"ááœáá·áºáá±á¬áááºážááá¯ážááœááºá ááá¯á¡ááºáá±á¬ááá¯ááºááá¯ááŸá¬ááœá±ááŒá®áž ááœá±ážáá»ááºá áá¬á¡á á¬áž"áá±á«ááºáž" option ááá¯ááœá±ážáá« "áá»áááºáááºááŸá¯á¡ááŒá Ạááá·áºáá«á»
- ááá¯áá±á¬ááºážáá±á¬ - ááŒá±ááŸááºážáá»ááºááŸá¬ááœá±áá°ááœáẠááá¯ááºááá¯ááºá á¡ááá¯ááŸááá±á¬ááá¯áẠ(ááá¯á·ááá¯áẠááá¯ááºáá»á¬áž ááá¯á·ááá¯áẠááá¯ááºááœá²áá»á¬ážáááº) ááá¯ááœá±ážáá»ááºááŒá®áž Alt ááá¯ááºááᯠáááá¬ážááŒá®áž ááá±á¬áá»ááºá¡áá
áºáá
áºáá¯ááá¯á· ááœá²áá°áá«á áááºááœá²áá°ááá¯ááºáááºááŸáá·áº Alt ááá¯ááºááᯠááŸáááºááá¯ááºáá±á¬á¡áá«á mouse cursor ááẠá¡áá±á«ááºážááá¹ááá¬á០ááŒáŸá¬ážáá
áºá
ááºážááá¯á· ááŒá±á¬ááºážááœá¬ážáááºááᯠááœá±á·ááá«áááºá
UPD: á€á á¬ááá¯ááºááœáẠá¡áááºážááẠááŸá¯ááºááœá±ážááŸá¯áá»á¬áž ááŒá¯áá¯ááºáá²á·ááẠ- ááá¯ááºáá»á¬ážá áœá¬ááᯠááœáŸá²ááŒá±á¬ááºážááẠáááá¬ážááá·áºáááºá Shift + Alt!
áá¯ááºáá¯á¶ážáá¯ááºáááºážááá¯áá±á¬ááºááœááºááŒá®ážáá±á¬ááºá áá¯áááááá±á¬áá»ááºááœáẠááá¯ááºáá áºáá¯áááŸááá«áááºá Class1.cs áááºááá¯ááºáᬠá¡áá¯ááºááœáẠ(á¡ááŒá¬áá±á¬ááºááŒáŸá¬áž) ááŒáá·áº
áááºážááŒááºáááºážááá¯ážááŸá áá¯ááºááᯠáááºážááŒááºááá·áºá¡áá«á áá¯ááºááá¯ááŒáááẠáááºááá·áºááá±á¬áá»ááºá¡ááŒá±á¬ááºážá¡áá¬ááᯠáááºááœá±ážáá»ááºááá¯ááºáááºá áááºážááẠááá°áá®áá±á¬á¡ááŒá±á¡áá±á¡ááá¯áẠá á¯á ááºážááŸá¯áááºá¹áá±ááá»á¬ážá¡á±á¬ááºááœáẠáá¯ááºááᯠáááºážááŒááºáá¬ážáááºááᯠááŒááºááœá±á·ááá¯ááºá á±áááº-
á€á¡á á®á¡á ááºááᯠá¡áá¯á¶ážááŒá¯á á¡ááŒá¬ážááá±á¬áá»ááºáá»á¬áž (2017-2020) á¡á¬ážáá¯á¶ážááᯠáááºáá®ážáá«áááºá Life hack - á¡áááºá áááºááẠá¡ááŒá±áá¶ááá±á¬áá»ááºááŸááá¯ááºáá² Solution Explorer ááœááºááá¯ááºáá»á¬ážááá¯ááœá²áá°áá«á áááºážááá¯á·ááá¯ááá·áºááºá¡ááŒá áºááá·áºááœááºážáá¬ážááá·áºááá±á¬áá»ááºááŸááá¯áá»áŸáẠAlt áá±á¬á·ááá¯áááá¬ážáááºáááá¯á¡ááºáá«á
ááááºá¡ááºáá¬ážááŸááºážá¡áá áºááá·áºááá·áºá¡áá»ááẠááá¯á·ááá¯áẠááá±á¬áá»ááºááá¯á· ááá¯ááºá¡áá áºáá»á¬ážááá·áºááá·áºá¡ááá¯ááºá¡ááá·áºá¡áá áá±á¬áºááŒáá¬ážáá±á¬ááœá±ážáá»ááºááœáá·áºááẠá¡ááœááºáá±á¬ááºážááœááºáá«áááºá áááŒá¬áá±ážáá®á áá»áœááºáá±á¬áºááẠááá±á¬áá»ááºáá áºáá¯ááŸáá·áº á¡á¬ážáá¯á¶ážááᯠáááºááá¯ááœá²áááá²ááá¯áᬠáá¯ááºáááẠááá±á¬áá±á«ááºááœá¬ážááŒá®áž áá¯ááááááºážáááºážááᯠáááºááœá¬ážáá±áá«áááºá
ááœá²á·á ááºážááŸá¯á ááá¹á áááº
á€áá±áá¬ááœááºáááºááŒá®ážáááºááŸáá·áº "áá±á¬ááºážáá«ážááẠáá¯áááá¡ááŒá±á¬ááºážáá»ááºáá»ááºážááŒá áºáá»áŸáẠááááááºážáááºážááᯠá¡áááºááŒá±á¬áá·áºáá±á¬áºááŒááááºážá" ááŒá®ážáá±á¬á· á¡ááŒá±á¡áá±á¡ááá¯áẠá á¯á ááºážááŸá¯áááºá¹áá±áááœá± áá¬ááŒá±á¬áá·áº ááá¯á¡ááºáá¬áá² ááá¯áá¬ááᯠááá¯ááŸááºážááŸááºážáááºážáááºáž ááááá¯ááºá á±ááá¯á· á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá»áœááºáá±á¬áº ááŸááºážááŒáá¬ážáá«áááºá ááá¯áá° áá»áœááºá¯ááºááá¯á·á¡á¬áž á¡áá±á¬ááºá¡áááºáá±á¬áºááẠááá¯á¡ááºáá±á¬ ááá±á¬áá»ááºáá»á¬ážááœáẠááœá²ááŒá¬ážááŸá¯áá»á¬ážááẠááá±á¬áá»ááºáá áºáá¯áᬠáá»ááºááŸááá±á¬á·ááŒá±á¬ááºáž á¡ááá¡áá» áááá¬ááááºá
á¡áá¬á¡á¬ážáá¯á¶ážááᯠááá¯ááá¯áááá¬á á±áááºá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠááá±á¬áá»ááºá¡áá áºááᯠáááºáá®ážáááºááá¯ááºáá±á¬áºáááºáž ááááááºážáááºážááŒáá·áº áááºáá®ážáá¬ážáá±á¬ áá»áœááºá¯ááºááá¯á·á áááºááŸáááá±á¬áá»ááºááᯠá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááŒá¯áá¯ááºáá«áááºá
ááá¯á·ááŒá±á¬áá·áº ááááŠážá áœá¬á áá»áœááºá¯ááºááá¯á·ááẠáááºááá áºáá¯ááŸááœá²á (ááá¯ááºáá»á¬áž ááá¯ááºááá¯ááºáá«ááŸááá±á¬) ááŸááœá²á ááá±á¬áá»ááºá¡á¬ážáá¯á¶ážááᯠáááºááŸá¬ážááá¯ááºáá«á á¡á²áá«ááœá±á áá¬ážááŸááºáž 2016-2020 á¡ááœáẠááá±á¬áá»ááºáá»á¬ážá ááŒá±ááŸááºážáá»ááºááŒáá·áº ááá¯ááºááœá²ááá¯ááœáá·áºááŒá®áž á€ááá±á¬áá»ááºáá»á¬ážá ááá¯ááºááœá²áá»á¬ážááᯠááá¯áá±áá¬ááœáẠáá»ááºáá«á
áá»áœááºá¯ááºááá¯á·á áá¯á¶ážááŒááºáá»ááºááœáẠááá±á¬áá»ááºáá áºáᯠáá»ááºáá«áá±ážáááºá MySuperPluginForRevit_2015. áááºážááá¯ááºááá¹áááá»á¬ážááá¯ááœáá·áºááŒá®áž-
- tab áá±á«áºááœáẠ"ááŒáŸá±á¬áá»ááŸá¬"ááááááºá¡áááºá០áá±á¬ááºáááºááœá²ááᯠáááºááŸá¬ážáá«á _2015 (áá¬ááŒá±á¬áá·áºáá²ááá¯áᬠáá±á¬ááºááá¯ááºážááŸá¬ ááŸááºážááœá¬ážáá«áááá·áºáááº)
- tab áá±á«áºááœáẠ"á¡á ááºážá¡áá±ážÂ» á¡ááŒá±á¡áá±á¡ááá¯ááºá á¯á ááºážááŸá¯áááºá¹áá±áááᯠáááºááŸá¬ážáá«á R2015 áááºááá¯ááºáá¬áááºáááºááŸ
ááŸááºáá»ááº- Visual Studio á áá±á¬ááºáá¯á¶ážáá¬ážááŸááºážááœáẠáá»áœááºááœááºážáá»ááºáá áºáá¯ááŸáááẠ- áááºážááá¯á·ááá¯áááŸáááá¯ááºáá±á¬áºáááºáž ááá±á¬áá»ááºáá¯ááºááá¹áááá»á¬ážáááºážááá¯ážááœáẠá¡ááŒá±á¡áá±á¡ááá¯áẠá á¯á ááºážááŸá¯áááºá¹áá±ááá»á¬ážááᯠáááŒááá«á á¡áááºá áááºááẠá€áá»áá¯á·ááœááºážáá»ááºááᯠááŒá¯á¶ááœá±á·áá«áá áááºážááá¯á·ááᯠ.csproj ááá¯ááºá០ááá¯ááºááá¯ááºáááºááŸá¬ážááẠááá¯á¡ááºáá«áááºá ááá¯á·áá±á¬áºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááœáẠá¡áá¯ááºáá¯ááºááẠáá»ááºááŸááá±áá±ážáá±á¬ááŒá±á¬áá·áº áááºáááºáá«á
áá±á¬ááºáááºááœá²ááᯠáááºááŸá¬ážááŒááºážááŒáá·áº Solution Explorer áááºážááá¯ážááœáẠááá±á¬áá»ááºááᯠá¡áááºááŒá±á¬ááºážáá«á _2015 ááá¯á·áá±á¬áẠááá±á¬áá»ááºááᯠááŒá±ááŸááºážáá»ááºá០áááºááŸá¬ážáá«á á á¯á¶áááºáá°áá»á¬ážá á ááºážáá»á¥áºážá ááºážáááºážááŸáá·áº áá¶á á¬ážáá»ááºáá»á¬ážááᯠááááºážááááºážááẠá€á¡áá¬ááẠááá¯á¡ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áááŒá±ááŸááºážáá»ááºááá¯áá«ááá¯ááœáá·áºááŒá®ážá ááá¯áá±áá¬ááœáẠááá±á¬áá»ááºááá¯ááºááœá²ááᯠá¡áááºááŒá±á¬ááºážáᬠááá±á¬áá»ááºááᯠááŒá±ááŸááºážáá»ááºáá²ááá¯á· ááŒááºááá·áºáá«á
ááœá²á·á ááºážááŸá¯áááºáá±áá»á¬ááá¯ááœáá·áºáá«á á¡áá±áááááºááœá²á·á ááºážáá¯á¶ ááœáŸááºáá±áž áá°á¡áá áááºážááá¯áááá¯á¡ááºáá«á ááá¯á·ááŒá±á¬áá·áºáá»áœááºá¯ááºááá¯á·áá»ááºáá«á áá»áœááºá¯ááºááá¯á·ááŸáá·áºáááºážááŸá®ážááŒá®ážáá¬ážá¡áááºáá»á¬ážááŒáá·áº ááœá²á·á ááºážááŸá¯á¡áá áºáá»á¬ážááᯠáááºáá®ážáá«áááºá R2015, R2016á âŠá R2020. á¡ááŒá¬ážááœá²á·á ááºážáá¯á¶á áá áºáá»á¬ážá០áááºáááºáá»á¬ážááᯠáá°ážáá°ááẠáááá¯á¡ááºáá² ááá±á¬áá»ááºááœá²á·á ááºážáá¯á¶áá»á¬ážááᯠáááºáá®ážááẠáááá¯á¡ááºááŒá±á¬ááºáž áááááŒá¯áá«á
ááá±á¬áá»ááºááŸáá·áºá¡áá° ááá¯ááºááœá²ááá¯á·ááœá¬ážááŒá®áž ááá·áºá¡ááœáẠá¡áááºááŒá±ááá·áº áááºážááŒááºáá°ááŸá .csproj ááá¯ážáá»á²á·ááŸá¯ááŒáá·áº ááá¯ááºááá¯ááœáá·áºáá«á á áá¬ážáá ááºá áááºááẠáááºážááᯠVisual Studio ááœááºááœáá·áºááá¯ááºááẠ- áááºááẠááá±á¬áá»ááºááᯠááœáŸáá·áºáááºááẠááá¯á¡ááºááŒá®áž ááá¯á·áá±á¬áẠááá¯áá»ááºáá±á¬á¡áá¬ááẠáááºá ááºáá®áá°ážááœáẠááŸááá±áááá·áºáááº-
áááºážááŒááºáá°ááẠáá»áááºááŸáááŒááºážááŸáá·áº á¡áá»ááºáá±ážáá»ááºáá»á¬áž ááŸá áºáá¯á áá¯á¶ážááŒá±á¬áá·áº Visual Studio ááœááºáááºážááŒááºááŒááºážááẠááá¯áá±á¬ááºážáá«áááºá
ááá¯ááºáá²ááŸá¬ element ááœá±ááá¯ááœá±á·áááá·áºáááºá
áá¯á¶ (ááá) ááŒááºá ááºááá¯á·ááœá¬ážáá«á á¡áááºááŒá¶ááŒá±á¡á¯ááºá ᯠá¥á á¹á á¬ááá¯ááŒáá·áºááŸá¯áá±á¬á· á ááºážáá±ážááœá²á¡ááẠ- áá«á á ááºážáá±ážááœá²áá²á· áá¬áááºááŒá áºááŒá®áž áá±á¬ááºáááºááá«áá²á· áá«ááááºá _2015. áá±á¬ááºáááºááœá²ááŸáááẠáááºááá¯ááºáá«á
á¡ááŒá±á¡áá±áá áºáá¯ááŸáá·áº ááŒááºá ááºáá áºáá¯ááᯠááŸá¬ááœá±ááŒááºážá
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
áááá¯á¡ááºáá«áá°ážá áá»ááºáá áºááá¯ááºáááºá
á¡ááŒá±á¡áá±ááŸáá·áºá¡áá°ááŒááºá ááº
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
code development ááŸáá·áº debugging á¡ááá·áºááœáẠá¡áá¯ááºáá¯ááºááẠááá¯á¡ááºáá«áááºá ááá·áºááá¯á¡ááºáá»ááºáá»á¬ážááŸáá·áº ááá¯ááºáá®á á±ááẠáááºážá áá¯ááºááá¹áááá»á¬ážááᯠááŒá±á¬ááºážáá²ááá¯ááºááẠ- ááá°áá®áá±á¬ á¡ááœááºáááºážááŒá±á¬ááºážáá»á¬áž áááºááŸááºááŒááºážá á¡ááŒá±á¡áá±á¡ááá¯áẠá á¯á ááºážááŸá¯áááºá¹áá±ááá»á¬ážááᯠááŒá±á¬ááºážáá²ááŒááºáž á áááº
á¡áᯠááŒááºá ááºá¡áá áºááœá± áááºáá®ážááŒáá·áºáá¡á±á¬áẠá¡áááºááŒá¶ááŒá±á¡á¯ááºá ᯠáá»áœááºá¯ááºááá¯á·áááœá²á·á ááºážáá¯á¶áá»á¬ážá¡ááœááºá á€ááŒááºá ááºáá»á¬ážááœáẠáá»áœááºá¯ááºááá¯á·ááẠáá¯ááºááá¹áááá±ážáá«ážááᯠáááºááŸááºááẠááá¯á¡ááºáááº-
- OutputPath - á¡ááœááºááá¯ááºááœá²á áá¯á¶áá±áááºááá¯ážááᯠáá«áááºááŸááºáááºá binR20xx
- Constants ááᯠáááºááŸááºáá«á - á¡ááŒá±á¡áá±á¡ááá¯ááºá á¯á ááºážááŸá¯áááºá¹áá±ááá»á¬ážá áááºááá¯ážááᯠáááºááŸááºááááºá TRACE;R20Ñ Ñ
- TargetFrameworkVersion - ááááºáá±á¬ááºážáá¬ážááŸááºážá Revit API á ááá°áá®áá±á¬áá¬ážááŸááºážáá»á¬ážááᯠáááºááŸááºááẠááá°áá®áá±á¬ ááááºáá±á¬ááºážáá»á¬áž ááá¯á¡ááºáááºá
- á ááºážáá±ážááœá²á¡ááẠ- á ááºážáá±ážááœá²á¡ááẠ(ááá¯ááá¯áááºááŸá¬ ááá¯ááºá¡áááº)á á ááºážáá±ážááœá²áá¡áááºá¡ááá¡áá»ááᯠáááºáá±ážááá¯ááºáá±á¬áºáááºáž á áœááºá á¯á¶ááááºá¡ááœáẠáá»áœááºá¯ááºáááºááá¯ážááᯠáá±ážáá¬ážááẠá¡ááŒá¶ááŒá¯áá«áááºá $(AssemblyName)_20Ñ Ñ . ááá¯ááá¯á·áá¯ááºáá±á¬ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠááááºá á¡áááºážáá±á¬áºá¡áááºá០áá±á¬ááºáááºááœá²ááᯠáááºááŸá¬ážáá²á·áááºá
á€ááŒááºá ááºáá»á¬ážá¡á¬ážáá¯á¶ážá á¡áá±ážááŒá®ážáá¯á¶ážá¡ááºá¹áá«áááºááŸá¬ áááºážááá¯á·ááᯠáá¯á¶ážááááŒá±á¬ááºážáá²áá² á¡ááŒá¬ážááá±á¬áá»ááºáá»á¬ážááá¯á· á¡ááœááºááá°áá°ážáá°ááá¯ááºááŒááºážááŒá áºáááºá áá±á¬ááºážáá«ážáá±á¬ááºááá¯ááºážááœáẠ.csproj ááá¯ááºá á¡ááŒá±á¬ááºážá¡áá¬á¡á¬ážáá¯á¶ážááᯠáá°ážááœá²áááºááŒáá«áááºá
áá±á¬ááºážááŒá®á áá»áœááºá¯ááºááá¯á·ááẠááá±á¬áá»ááºá áá¯ááºááá¹áááá»á¬ážááᯠááŸá¬ááœá±ááŒá®ážááŒá® - áááºážááẠááááºáá²áá«á áá«áá±ááá·áº plug-in libraries (NuGet packages) áá²á· áá¬áá¯ááºáááá²á áááºáá¶áá±á·áá¬ááŒáá·áºáá»áŸáẠáá«áááºáá±á¬ á
á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠá¡á
áááºá¡ááá¯ááºážáá»á¬ážááœáẠáááºááŸááºáá¬ážáááºááᯠááœá±á·ááááºááŒá
áºáá«áááºá
ááŒááºá
ááºááẠáá»áœááºá¯ááºááá¯á·áá¡áá°á¡áá®ááá¯á· áá±á¬ááºááŸááá¬áá«áááºá
ááŒááºá ááºááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá ááŸá±ážááá»áŒááá°áá®áá±á¬ááœá²á·á ááºážáá¯á¶áá»á¬ážá¡ááœáẠááá°áá®áá±á¬ 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 áááºáá±á·áá»áºá¡á¬ážáá¯á¶ážááᯠááŒááºáá°áá«áâáá»áœááºáá±á¬áºááá¯á·áá²á· áááºáá±á·áá»áºááœá±á áááºááá¯ááŒá±á¬ááºážáá²ááœá¬ážáá²ááá¯áᬠáá»áœááºáá±á¬áºááá¯á· ááŒááºáá«áááºá
á€á¡ááá·áºááœáẠáá»áœááºá¯ááºááẠá¡áá¯á¶ážá áœááºáá±á¬ á¡áá¯á¶ážááá¯á· áá±á¬ááºáá²á·áááº- ááœá²á·á ááºážááŸá¯á¡á¬ážáá¯á¶ážááᯠáá áºááŒáá¯ááºááẠá á¯áá±á¬ááºážááá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºá ááºážáá±ážááœá²ááᯠ(menu "") ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºáá¡á ááºážá¡áá±áž"->"á¡áá¯ááºááá¯ááºáá±á¬ááº") ááá¯á·áá±á¬áº ááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá»á¬ážááᯠááŒá±á¬ááºážááá·áºá¡áá« áááºáá±á·áá»áºáá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬áẠááŒááºáááºááá°áááºááá¯ááºáá«á ááá±á¬áá»ááºááᯠáááºáááºáá±á¬á¡áá«ááœááºá áá®á¡áá¯áá®á¡á ááŒá áºááá·áºáá±á¬áºáááºážá á á¶áááºážáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á€ááŒá¿áá¬á¡ááœáẠá¡ááŒá±ááᯠáá»áœááºá¯ááºááŸá¬áááœá±á·áá«á ááŒá áºááá¯ááºáá¬ááá±á¬á· Visual Studio bug áá áºáá¯áááºáž ááŒá áºááá¯ááºáá«áááºá
ááá¯á·ááŒá±á¬áá·áº batch assembly á¡ááœáẠá¡áá°áž á¡ááá¯á¡áá»á±á¬áẠáááºáááºááŸá¯á
áá
áºááᯠá¡áá¯á¶ážááŒá¯ááẠáá¯á¶ážááŒááºáá²á·áááºá
ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·áááŒá±ááŸááºážáá»áẠ(ááá±á¬áá»ááºááá¯ááºáá«) ááá¯ááºááœá²ááá¯á·ááœá¬ážá áá±á¬á·ááá¯áááá¬ážáá«á á¡ááá¯ááºáž ááá¯ááºááœá²á¡ááœááºážááŸá ááœááºáá±áá±á¬áá±áá¬áá±á«áºááœáẠáá¬áááºááá áºááŸáááºáá« - áááºá ááºáá®áá°ážááœáẠááá¯ááºááá¯ááœá±ážáá»ááºáá«áPowerShell áááºážááá¯ážááᯠá€áá±áá¬ááœáẠááœáá·áºáá«á"á
ááááºáááºááá±ážááẠnukeááŒá®ážááẠááááá¯á¶áž command ááá¯áá±ážáá«á
dotnet tool install Nuke.GlobalTool âglobal
ááᯠcommand ááá¯áá±ážáá«á nuke ááŸáá·áº configure áá¯ááºááẠááá·áºá¡á¬áž ááááá±ážáááá·áºáááºá nuke áááºááŸáááá±á¬áá»ááºá¡ááœááºá áá«ááᯠáá¯ááŸá¬ážááᯠááá¯ááŸááºá¡á±á¬áẠáááºááá¯áá±ážáááŸááºáž ááááá±á¬á·áá°áž - á¡ááºá¹áááááºááᯠ.nuke ááá¯áẠááŸá¬áááœá±á·ááá¯ááºáá°ážááá¯á· áá±ážáá¬ážáááá·áºáááºá áááºáá±á¬ááºááŸá¯ááᯠá áá áºááá·áºááœááºážááá¯áá«ááá¬ážá [y/n]
Y ááá¯ááºááᯠááŸáááºááŒá®ážáá±á¬áẠááá¯ááºááá¯ááºáááºáááºáá»á¬áž áá«áááºáááºá áá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá¬ááœáẠá¡ááá¯ážááŸááºážáá¯á¶ážááœá±ážáá»ááºááŸá¯ ááá¯á¡ááºáá«áááºá MSBuildááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠá ááááºááŸá±á¬á·áá¯á¶áá«á¡ááá¯ááºáž á¡ááŒá±ááŒá áºáááº-
ááá±á¬áá»ááºá¡áá áºáá áºáá¯ááᯠááá·áºááœááºážááŒá®ážááŒá áºáá±á¬ááŒá±á¬áá·áº ááŒá±ááŸááºážáá»ááºááᯠááŒááºáááºá áááºááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž áá±á¬ááºážááá¯ááá·áº Visual Studio ááá¯á· ááœá¬ážááŒáá«á áá¯á·á áá»áœááºá¯ááºááá¯á·ááẠááŒá±ááŸááºážáá»ááºá¡á¬áž ááŒááºáááºá áááºááŒá®áž áá»áœááºá¯ááºááá¯á·ááœáẠááá±á¬áá»ááºáá áºáá¯ááŸááááºááᯠááŒááºááœá±á·ááááºá áááºáá±á¬áẠááá¯ááºáá áºáá¯áááºážááá¯áᬠá áááºáááºá á¬ážááẠ- Build.cs
á€ááá¯ááºááá¯ááœáá·áºááŒá®áž ááœá²á·á ááºážááŸá¯á¡á¬ážáá¯á¶ážá¡ááœáẠááá±á¬áá»ááºááá¯áááºáá±á¬ááºááẠscript áá áºáá¯áá±ážáá«á áá±á¬ááºážááŒá®á ááá¯á·ááá¯áẠááá·áºááá¯á¡ááºáá»ááºáá»á¬ážááŸáá·áº ááá¯ááºáá®á¡á±á¬áẠáááºážááŒááºááá¯ááºáá±á¬ áá»áœááºá¯ááºá áá¬ááºááœáŸááºážááᯠá¡áá¯á¶ážááŒá¯áá«-
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 áááºážááá¯ážááá¯á· ááŒááºááœá¬ážááŒá®áž command ááᯠáááºáá¶áá±ážáá¬ážáá«á nuke (ááẠcommand ááá¯áá±ážááá¯ááºáááºá nuke ááá¯á¡ááºáááºááá¯ááœáŸááºááŒáááºá target á. áá«áá±ááá·áº áá»áœááºáá±á¬áºááá¯á·ááŸá¬ áá áºáá¯ááŸááááºá target ádefault á¡áá±ááŒáá·áº áá¯ááºáá±á¬ááºáááºá) Enter ááá¯ááºááᯠááŸáááºááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºááŸááºáá áºáá¬ážáá²á·ááá¯á·áááºá áá»áœááºá¯ááºááá¯á·á ááá±á¬áá»ááºááẠááá°áá®áá±á¬áá¯á¶á á¶áá»á¬ážá¡ááœáẠá¡ááá¯á¡áá»á±á¬áẠá á¯á ááºážáá¬ážáá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠáááá·áºáááºáá¬áá»á¬ážáá²á·ááá¯á· áá¶á á¬ážááááºááŒá áºáá«áááºá
á áá¬ážáá ááºá áááºááẠVisual Studio á០PowerShell ááᯠááá¯ááºááá¯ááºáá¯á¶ážááá¯ááºááẠ(menu "ááŒáá·áºááŸá¯ááŒááºáž"->"á¡ááŒá¬ážááŒáááºážáá±á«ááºáá»á¬áž"->"Package Manager Console") áá«áá±ááá·áº á¡áá¬á¡á¬ážáá¯á¶ážá á¡ááŒá°áá²á· á¡áááºááŸááááºá ááááºá¡áááºááŒá±ááŸá¬ááá¯ááºáá°ážá
á€áááºááŸá¬ áá»áœááºá¯ááºá áá±á¬ááºážáá«ážááᯠá¡áá¯á¶ážáááºáá«áááºá AutoCAD á¡ááœáẠááœá±ážáá»ááºááœáá·áºááᯠáááºááá¯ááºááá¯áẠá¡ááŒá±ááŸá¬ááá¯ááºáááºááá¯á· áá¯á¶ááŒááºáá«áááºá á€áá±áá¬ááœáẠáááºááŒáá¬ážáá±á¬ áá á¹á ááºážááẠáááºážá "áá±á¬ááºáááºáá»á¬áž" ááᯠááœá±á·ááŸááááá·áºáááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá
СпаÑОбПзавМОЌаМОе!
source: www.habr.com