ΠΠΎΠ³Π° ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠ΅ ΠΏΡΠΈΠΊΠ»ΡΡΠΎΡΠΈ Π·Π° CAD Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ (
ΠΠΎΠ³Π° ΠΈΠΌΠ°ΡΠ΅ ΡΠ°ΠΌΠΎ Π΅Π΄Π΅Π½ Π΄ΠΎΠ΄Π°ΡΠΎΠΊ ΠΈΠ»ΠΈ ΡΓ¨ ΡΡΡΠ΅ ΡΡΠ΅ ΡΠ°ΠΌΠΎΡΠΊ ΠΏΠΎΡΠ΅ΡΠ½ΠΈΠΊ Π²ΠΎ ΠΎΠ²Π° ΠΏΡΠ°ΡΠ°ΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΊΠΎΠΏΠΈΡΠ° ΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ, Π΄Π° Π³ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ ΠΌΠ΅ΡΡΠ° Π²ΠΎ Π½Π΅Π³ΠΎ ΠΈ Π΄Π° ΡΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π½ΠΎΠ²Π° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊΠΎΡ. Π‘ΠΏΠΎΡΠ΅Π΄ ΡΠΎΠ°, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π½Π° ΠΊΠΎΠ΄ΠΎΡ ΡΠ΅ ΠΏΠΎΠ²Π»Π΅ΡΠ°Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π°ΡΠ΅ Π½Π° ΡΡΠΎΡΠΎΡΠΈΡΠ΅ Π·Π° ΡΠ°Π±ΠΎΡΠ½Π° ΡΠΈΠ»Π°.
ΠΠ°ΠΊΠΎ ΡΡΠΎ ΡΡΠ΅ΠΊΠ½ΡΠ²Π°ΡΠ΅ ΠΈΡΠΊΡΡΡΠ²ΠΎ ΠΈ Π·Π½Π°Π΅ΡΠ΅, ΡΠ΅ Π½Π°ΡΠ΄Π΅ΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΎΠ²ΠΎΡ ΠΏΡΠΎΡΠ΅Ρ. ΠΠΎ ΠΎΠ΄Π΅Π² ΠΎΠ²ΠΎΡ ΠΏΠ°Ρ ΠΈ ΡΠ°ΠΊΠ°ΠΌ Π΄Π° Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ ΡΠΎ ΡΡΠΎ Π·Π°Π²ΡΡΠΈΠ² ΠΈ ΠΊΠΎΠ»ΠΊΡ Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ.
ΠΡΠ²ΠΎ, Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΡ Π΅ ΠΎΡΠΈΠ³Π»Π΅Π΄Π΅Π½ ΠΈ ΠΊΠΎΡ Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠ°ΠΌ Π΄ΠΎΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅.
ΠΡΡΠΊΠΈ Π΄ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ½ΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ
Π Π·Π° Π΄Π° Π±ΠΈΠ΄Π΅ ΡΓ¨ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ, Π²ΠΈΠ·ΡΠ΅Π»Π½ΠΎ ΠΈ ΡΠ°Π·Π±ΠΈΡΠ»ΠΈΠ²ΠΎ, ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌ ΡΓ¨ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π°ΠΏΡΡΡΠ°ΠΊΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠ°Π·Π²ΠΎΡ Π½Π° ΠΏΡΠΈΠΊΠ»ΡΡΠΎΡΠΈ.
ΠΡΠ΄Π΅ Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΠΌΠ΅ Visual Studio (ΡΠ° ΠΈΠΌΠ°ΠΌ Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° ΠΠ°Π΅Π΄Π½ΠΈΡΠ°ΡΠ° 2019. Π Π΄Π° - Π½Π° ΡΡΡΠΊΠΈ) ΠΈ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ Π½ΠΎΠ²ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΡΠ΄Π΅ Π΄Π° ΠΌΡ ΡΠ΅ ΡΠ°Π²ΠΈΠΌΠ΅ MySuperPluginForRevit
ΠΠ΅ ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊ Π·Π° Revit Π·Π° Π²Π΅ΡΠ·ΠΈΠΈ 2015-2020. ΠΠ°ΡΠΎΠ°, Π°ΡΠ΄Π΅ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ Π½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ Π²ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ (Net Framework Class Library) ΠΈ Π΄Π° Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ°ΠΌΠ΅ MySuperPluginForRevit_2015
Π’ΡΠ΅Π±Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ Π²ΡΡΠΊΠΈ Π΄ΠΎ API Π½Π° Revit. Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ Π²ΡΡΠΊΠΈ Π΄ΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ (ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ SDK ΠΈΠ»ΠΈ ΡΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΠΈ Π½Π° Revit), Π½ΠΎ Π²Π΅Π΄Π½Π°Ρ ΡΠ΅ ΡΠ° ΡΠ»Π΅Π΄ΠΈΠΌΠ΅ Π²ΠΈΡΡΠΈΠ½ΡΠΊΠ°ΡΠ° ΠΏΠ°ΡΠ΅ΠΊΠ° ΠΈ ΡΠ΅ Π³ΠΎ ΠΏΠΎΠ²ΡΠ·Π΅ΠΌΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΡ NuGet. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΡΠ΄Π΅ΡΠ΅ Π΄ΠΎΡΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΈ, Π½ΠΎ ΡΠ°Ρ ΡΠ΅ Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠ°ΠΌ ΠΌΠΎΠΈΡΠ΅.
ΠΡΠΊΠ°ΠΊΠΎ ΡΠ΅ Π³ΠΎ ΠΏΠΎΠ²ΡΠ·Π΅ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΡ, ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ ΡΠΎ Π΄Π΅ΡΠ½ΠΎΡΠΎ ΠΊΠΎΠΏΡΠ΅ Π½Π° ΡΡΠ°Π²ΠΊΠ°ΡΠ° βΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈ"ΠΈ ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠ° ΡΡΠ°Π²ΠΊΠ°ΡΠ°"ΠΡΠ΅ΠΌΠ΅ΡΡΠ΅ΡΠ΅ Π³ΠΎ packages.config Π²ΠΎ PackageReference...Β»
ΠΠΊΠΎ ΠΎΠ΄Π΅Π΄Π½Π°Ρ Π²ΠΎ ΠΎΠ²ΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΠΏΠ°Π½ΠΈΡΠΈΡΠ΅, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π²ΠΎ ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠΎΡ Π·Π° ΡΠ²ΠΎΡΡΡΠ²Π° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ Π½Π΅ΠΌΠ° Π΄Π° ΠΈΠΌΠ° Π²Π°ΠΆΠ½Π° ΡΡΠ°Π²ΠΊΠ° βΠΠΎΠΏΠΈΡΠ°Ρ Π»ΠΎΠΊΠ°Π»Π½ΠΎβ, ΡΡΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠ²Π½ΠΎ ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠ΅ Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π»Π°ΠΆΠ½ΠΈ, ΡΠΎΠ³Π°Ρ Π½Π΅ ΠΏΠ°Π½ΠΈΡΠ΅ΡΠ΅ - ΠΎΠ΄Π΅ΡΠ΅ Π²ΠΎ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° ΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ, ΠΎΡΠ²ΠΎΡΠ΅ΡΠ΅ ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠΎ Π½Π°ΡΡΠ°Π²ΠΊΠ°ΡΠ° .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.
ΠΠ°Π±Π΅Π»Π΅ΠΆΠ΅ΡΠ΅ Π΄Π΅ΠΊΠ° ΡΠΈΠΌΠ±ΠΎΠ»ΠΎΡ ΠΌΠΎΡΠ° Π΄Π° ΡΠ΅ Π΄ΠΎΠ΄Π°Π΄Π΅ ΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ Π·Π° Debug ΠΈ Release.
ΠΠ°, Π΄ΠΎΠ΄Π΅ΠΊΠ° ΡΠΌΠ΅ Π²ΠΎ ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠΎΡ ΡΠΎ ΡΠ²ΠΎΡΡΡΠ²Π°, Π²Π΅Π΄Π½Π°Ρ ΠΎΠ΄ΠΈΠΌΠ΅ Π½Π° ΡΠ°Π±ΡΠ»Π°ΡΠΎΡΠΎΡ βΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°βΠΈ Π½Π° ΡΠ΅ΡΠ΅Π½βΠ‘ΡΠ°Π½Π΄Π°ΡΠ΄Π΅Π½ ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡΒ» ΠΎΡΡΡΡΠ°Π½Π΅ΡΠ΅ ΡΠ° Π½Π°ΡΡΠ°Π²ΠΊΠ°ΡΠ° _2015ΡΠ°ΠΊΠ° ΡΡΠΎ Π½Π°ΡΠΈΠΎΡ ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡ Π΅ ΡΠ½ΠΈΠ²Π΅ΡΠ·Π°Π»Π΅Π½ ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠ΅Π½ ΠΎΠ΄ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠΊΠ»ΠΎΠΏΠΎΡ:
ΠΠΎ ΠΌΠΎΡΠΎΡ ΡΠ»ΡΡΠ°Ρ, Π²ΠΎ ΡΠΈΠ½Π°Π»Π½ΠΈΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄, ΠΏΡΠΈΠΊΠ»ΡΡΠΎΡΠΈΡΠ΅ ΠΎΠ΄ ΡΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΠΈ ΡΠ΅ ΡΡΠ°Π²Π°Π°Ρ Π²ΠΎ Π΅Π΄Π½Π° ΠΏΠ°ΠΏΠΊΠ°, ΡΠ°ΠΊΠ° ΡΡΠΎ ΠΌΠΎΠΈΡΠ΅ ΠΈΠΌΠΈΡΠ° Π½Π° ΡΠΊΠ»ΠΎΠΏΠΎΠ²ΠΈ ΠΎΡΡΠ°Π½ΡΠ²Π°Π°Ρ ΡΠΎ Π½Π°ΡΡΠ°Π²ΠΊΠ°ΡΠ° Π½Π° ΡΠΎΡΠΌΡΠ»Π°ΡΠΎΡ _20Ρ Ρ . ΠΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° ΡΠ° ΠΎΡΡΡΡΠ°Π½ΠΈΡΠ΅ Π½Π°ΡΡΠ°Π²ΠΊΠ°ΡΠ° ΠΎΠ΄ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠΊΠ»ΠΎΠΏΠΎΡ Π°ΠΊΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΡΠ²Π° Π΄Π΅ΠΊΠ° ΡΠ΅ Π½Π°ΠΎΡΠ°Π°Ρ Π²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠ°ΠΏΠΊΠΈ.
ΠΡΠ΄Π΅ Π΄Π° ΠΎΠ΄ΠΈΠΌΠ΅ Π½Π° ΠΊΠΎΠ΄ΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΠΠ»Π°ΡΠ° 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;
}
}
}
ΠΠ΅Π΄Π½Π°Ρ Π³ΠΈ Π·Π΅ΠΌΠ°Π² ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΠΈ Π½Π° Revit Π½Π°Π΄ Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° 2015 Π³ΠΎΠ΄ΠΈΠ½Π° (ΠΊΠΎΠΈ Π±Π΅Π° Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΡ Π½Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ) ΠΈ Π²Π΅Π΄Π½Π°Ρ Π³ΠΎ Π·Π΅ΠΌΠ°Π² ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΏΡΠΈΡΡΡΡΠ²ΠΎΡΠΎ Π½Π° ΡΡΠ»ΠΎΠ²Π½ΠΈ ΡΠΈΠΌΠ±ΠΎΠ»ΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ°, ΠΊΠΎΠΈ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π½ΠΈ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΈΡΡΠΈΠΎΡ ΡΠ°Π±Π»ΠΎΠ½.
ΠΡΠ΄Π΅ Π΄Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌΠ΅ Π½Π° Π³Π»Π°Π²Π½ΠΈΠΎΡ Π±Π΅Π»Π΅Π³. ΠΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ Π²ΠΎ Π½Π°ΡΠ΅ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠ°ΠΌΠΎ Π·Π° Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° Π½Π° ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊΠΎΡ Π·Π° Revit 2016. ΠΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΠ²Π°ΠΌΠ΅ ΡΠΈΡΠ΅ ΡΠ΅ΠΊΠΎΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈ ΠΏΠΎΠ³ΠΎΡΠ΅, ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ, Π·Π°ΠΌΠ΅Π½ΡΠ²Π°ΡΡΠΈ Π³ΠΎ Π±ΡΠΎΡΠΎΡ 2015 ΡΠΎ Π±ΡΠΎΡΠΎΡ 2016. ΠΠΎ, Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΠΠ»Π°ΡΠ° 1.cs ΠΈΠ·Π±ΡΠΈΡΠ΅ΡΠ΅ ΠΎΠ΄ Π½ΠΎΠ²ΠΈΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ.
ΠΠ°ΡΠΎΡΠ΅ΠΊΠ° ΡΠΎ ΠΏΠΎΡΡΠ΅Π±Π½Π°ΡΠ° ΡΠΈΡΡΠ° - ΠΠ»Π°ΡΠ° 1.cs β Π²Π΅ΡΠ΅ Π³ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΈ ΡΠ°ΠΌΠΎ ΡΡΠ΅Π±Π° Π΄Π° Π²ΠΌΠ΅ΡΠ½Π΅ΠΌΠ΅ Π»ΠΈΠ½ΠΊ Π΄ΠΎ Π½Π΅Π³ΠΎ Π²ΠΎ Π½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠΎΡΡΠΎΡΠ°Ρ Π΄Π²Π° Π½Π°ΡΠΈΠ½Π° Π·Π° Π²ΠΌΠ΅ΡΠ½ΡΠ²Π°ΡΠ΅ Π²ΡΡΠΊΠΈ:
- ΠΠΎΠ»Π³ΠΎ β ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ ΡΠΎ Π΄Π΅ΡΠ½ΠΎΡΠΎ ΠΊΠΎΠΏΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΠΈ ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ βΠΠΎΠ΄Π°Π΄Π΅ΡΠ΅Β»->Β«ΠΠΎΡΡΠΎΠ΅ΡΠΊΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ", Π²ΠΎ ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠΎΡ ΡΡΠΎ ΡΠ΅ ΠΎΡΠ²ΠΎΡΠ°, ΠΏΡΠΎΠ½Π°ΡΠ΄Π΅ΡΠ΅ ΡΠ° ΠΏΠΎΡΡΠ΅Π±Π½Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΈ Π½Π°ΠΌΠ΅ΡΡΠΎ ΠΎΠΏΡΠΈΡΠ°ΡΠ° "ΠΠΎΠ΄Π°Π΄Π΅ΡΠ΅"ΠΈΠ·Π±Π΅ΡΠΈ ΡΠ° ΠΎΠΏΡΠΈΡΠ°ΡΠ°"ΠΠΎΠ΄Π°Ρ ΠΊΠ°ΠΊΠΎ Π²ΡΡΠΊΠ°Β»
- ΠΡΠ°ΡΠΊΠΎ β Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π²ΠΎ ΠΈΡΡΡΠ°ΠΆΡΠ²Π°ΡΠΎΡ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΡΠ°, ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠ° ΡΠ°ΠΊΠ°Π½Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° (ΠΈΠ»ΠΈ Π΄ΡΡΠΈ ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ, ΠΏΠ° Π΄ΡΡΠΈ ΠΈ ΡΠ΅Π»ΠΈ ΠΏΠ°ΠΏΠΊΠΈ) ΠΈ ΠΏΠΎΠ²Π»Π΅ΡΠ΅ΡΠ΅ ΡΠ° Π²ΠΎ Π½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ Π΄ΠΎΠ΄Π΅ΠΊΠ° Π³ΠΎ Π΄ΡΠΆΠΈΡΠ΅ ΠΊΠΎΠΏΡΠ΅ΡΠΎ Alt. ΠΠ°ΠΊΠΎ ΡΡΠΎ Π²Π»Π΅ΡΠ΅ΡΠ΅, ΡΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅ Π΄Π΅ΠΊΠ° ΠΊΠΎΠ³Π° ΡΠ΅ Π³ΠΎ ΠΏΡΠΈΡΠΈΡΠ½Π΅ΡΠ΅ ΠΊΠΎΠΏΡΠ΅ΡΠΎ Alt, ΠΊΡΡΡΠΎΡΠΎΡ Π½Π° Π³Π»ΡΠ²ΡΠ΅ΡΠΎ ΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΎΠ΄ Π·Π½Π°ΠΊ ΠΏΠ»ΡΡ Π²ΠΎ ΡΡΡΠ΅Π»ΠΊΠ°.
UPD: ΠΠ°ΠΏΡΠ°Π²ΠΈΠ² ΠΌΠ°Π»Π° ΠΊΠΎΠ½ΡΡΠ·ΠΈΡΠ° Π²ΠΎ ΠΎΠ²ΠΎΡ ΠΏΠ°ΡΡΡ - Π·Π° Π΄Π° ΠΏΡΠ΅ΡΡΠ»ΠΈΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΡΠ΅Π±Π° Π΄Π° Π΄ΡΠΆΠΈΡΠ΅ ΠΏΡΠΈΡΠΈΡΠ½Π°ΡΠΎ Shift + Alt!
ΠΠΎ ΡΠΏΡΠΎΠ²Π΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΠΎΡΡΠ°ΠΏΠΊΠ°ΡΠ° ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π΄ΠΎΡΠΈΠ΅ Π²ΠΎ Π²ΡΠΎΡΠΈΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΠ»Π°ΡΠ° 1.cs ΡΠΎ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½Π°ΡΠ° ΠΈΠΊΠΎΠ½Π° (ΡΠΈΠ½Π° ΡΡΡΠ΅Π»ΠΊΠ°):
ΠΠΎΠ³Π° ΡΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ ΠΊΠΎΠ΄ Π²ΠΎ ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠΎΡ Π½Π° ΡΡΠ΅Π΄ΡΠ²Π°ΡΠΎΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π²ΠΎ ΠΊΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠΊΠ°ΠΆΠ΅ ΠΊΠΎΠ΄ΠΎΡ, ΡΡΠΎ ΡΠ΅ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΎΡ ΡΡΠΎ ΡΠ΅ ΡΡΠ΅Π΄ΡΠ²Π° ΠΏΠΎΠ΄ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΌΠ±ΠΎΠ»ΠΈ Π·Π° ΡΡΠ»ΠΎΠ²Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ°:
ΠΠΈΠ΅ Π³ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΡΠΈΡΠ΅ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ (2017-2020) ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ° ΠΎΠ²Π°Π° ΡΠ΅ΠΌΠ°. ΠΠ°ΡΡ Ρ Π°ΠΊ - Π°ΠΊΠΎ Π²Π»Π΅ΡΠ΅ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π²ΠΎ Solution Explorer Π½Π΅ ΠΎΠ΄ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ, ΡΡΠΊΡ ΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π²Π΅ΡΠ΅ ΡΠ΅ Π²ΠΌΠ΅ΡΠ½Π°ΡΠΈ ΠΊΠ°ΠΊΠΎ Π²ΡΡΠΊΠ°, ΡΠΎΠ³Π°Ρ Π½Π΅ ΠΌΠΎΡΠ° Π΄Π° Π³ΠΎ Π΄ΡΠΆΠΈΡΠ΅ ΠΊΠΎΠΏΡΠ΅ΡΠΎ Alt!
ΠΠΏΠΈΡΠ°Π½Π°ΡΠ° ΠΎΠΏΡΠΈΡΠ° Π΅ Π΄ΠΎΡΡΠ° Π΄ΠΎΠ±ΡΠ° Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΡ Π½Π° Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ Π½ΠΎΠ²Π° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊΠΎΡ ΠΈΠ»ΠΈ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΡ Π½Π° Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ Π½ΠΎΠ²ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ - ΡΠ΅ΡΠΎ ΠΎΠ²Π° ΡΡΠ°Π½ΡΠ²Π° ΠΌΠ½ΠΎΠ³Ρ Π΄ΠΎΡΠ°Π΄Π½ΠΎ. Π Π½Π΅ΠΎΠ΄Π°ΠΌΠ½Π° ΠΎΠ΄Π΅Π΄Π½Π°Ρ Π½Π°Π΅Π΄Π½Π°Ρ ΡΡΠ°ΡΠΈΠ² ΠΊΠ°ΠΊΠΎ ΡΠ΅ΡΠΎ ΡΠΎΠ° Π΄Π° Π³ΠΎ ΡΡΠ΅Π΄Π°ΠΌ ΡΠΎ Π΅Π΄Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½ΡΠ²Π°ΠΌΠ΅ Π½Π° Π²ΡΠΎΡΠΈΠΎΡ ΠΌΠ΅ΡΠΎΠ΄
ΠΠ°Π³ΠΈΡΠ°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅
ΠΡΠΊΠ°ΠΊΠΎ ΡΠ΅ Π·Π°Π²ΡΡΠΈΡΠ΅ ΡΠΎ ΡΠΈΡΠ°ΡΠ΅ΡΠΎ ΠΎΠ²Π΄Π΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ½Π΅ΡΠ΅: βΠΠΎΡΡΠΎ Π³ΠΎ ΠΎΠΏΠΈΡΠ°Π²ΡΠ΅ ΠΏΡΠ²ΠΈΠΎΡ ΠΌΠ΅ΡΠΎΠ΄, Π°ΠΊΠΎ Π½Π°ΠΏΠΈΡΠΎΡ Π΅ Π²Π΅Π΄Π½Π°Ρ Π·Π° Π²ΡΠΎΡΠΈΠΎΡ?!β Π ΠΎΠΏΠΈΡΠ°Π² ΡΓ¨ Π·Π° Π΄Π° Π±ΠΈΠ΄Π΅ ΠΏΠΎΡΠ°ΡΠ½ΠΎ Π·ΠΎΡΡΠΎ Π½ΠΈ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ ΡΠΈΠΌΠ±ΠΎΠ»ΠΈ Π·Π° ΡΡΠ»ΠΎΠ²Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ° ΠΈ Π½Π° ΠΊΠΎΠΈ ΠΌΠ΅ΡΡΠ° ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΡΠ²Π°Π°Ρ Π½Π°ΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ. Π ΡΠ΅Π³Π° Π½ΠΈ ΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΡΠ°ΡΠ½ΠΎ ΠΊΠ°ΠΊΠ²ΠΈ ΡΠΎΡΠ½ΠΎ ΡΠ°Π·Π»ΠΈΠΊΠΈ Π²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅, ΠΎΡΡΠ°Π²Π°ΡΡΠΈ ΡΠ°ΠΌΠΎ Π΅Π΄Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ.
Π Π·Π° Π΄Π° Π±ΠΈΠ΄Π΅ ΡΓ¨ ΠΏΠΎΠΎΡΠΈΠ³Π»Π΅Π΄Π½ΠΎ, Π½Π΅ΠΌΠ° Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ Π½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ, ΡΡΠΊΡ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ΅Π³Π°ΡΠ΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΎΠ·Π΄Π°Π΄Π΅Π½ Π½Π° ΠΏΡΠ² Π½Π°ΡΠΈΠ½.
ΠΠ½Π°ΡΠΈ, ΠΏΡΠ΅Π΄ ΡΓ¨, Π³ΠΈ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°ΠΌΠ΅ ΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΎΡΠ²Π΅Π½ Π³Π»Π°Π²Π½ΠΈΠΎΡ (ΡΡΠΎ Π³ΠΈ ΡΠΎΠ΄ΡΠΆΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅). ΠΠ½ΠΈΠ΅. ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π·Π° Π²Π΅ΡΠ·ΠΈΠΈ 2016-2020. ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ ΡΠ° ΠΏΠ°ΠΏΠΊΠ°ΡΠ° ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΠΈΠ·Π±ΡΠΈΡΠ΅ΡΠ΅ Π³ΠΈ ΠΏΠ°ΠΏΠΊΠΈΡΠ΅ Π½Π° ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΡΠ°ΠΌΡ.
ΠΠΌΠ°ΠΌΠ΅ ΡΡΡΠ΅ Π΅Π΄Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ Π²ΠΎ Π½Π°ΡΠ° ΠΎΠ΄Π»ΡΠΊΠ° - MySuperPluginForRevit_2015. ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ Π³ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΡΠ²ΠΎΡΡΡΠ²Π° ΠΈ:
- ΠΠ° ΡΠ°Π·ΠΈΡΠ΅ΡΠΎ "ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°βΠΡΡΡΡΠ°Π½Π΅ΡΠ΅ ΡΠ° Π½Π°ΡΡΠ°Π²ΠΊΠ°ΡΠ° ΠΎΠ΄ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠΊΠ»ΠΎΠΏΠΎΡ _2015 (ΡΠ΅ ΡΡΠ°Π½Π΅ ΡΠ°ΡΠ½ΠΎ Π·ΠΎΡΡΠΎ ΠΏΠΎΠ΄ΠΎΡΠ½Π°)
- ΠΠ° ΡΠ°Π·ΠΈΡΠ΅ΡΠΎ "Π‘ΠΎΠ±ΡΠ°Π½ΠΈΠ΅Β» ΠΎΡΡΡΡΠ°Π½Π΅ΡΠ΅ Π³ΠΎ ΡΠΈΠΌΠ±ΠΎΠ»ΠΎΡ Π·Π° ΡΡΠ»ΠΎΠ²Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ° R2015 ΠΎΠ΄ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎΡΠΎ ΠΏΠΎΠ»Π΅
ΠΠ°Π±Π΅Π»Π΅ΡΠΊΠ°: Π½Π°ΡΠ½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° Visual Studio ΠΈΠΌΠ° Π³ΡΠ΅ΡΠΊΠ° - ΡΠΈΠΌΠ±ΠΎΠ»ΠΈΡΠ΅ Π·Π° ΡΡΠ»ΠΎΠ²Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ° Π½Π΅ ΡΠ΅ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π°Π°Ρ Π²ΠΎ ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠΎΡ Π·Π° ΡΠ²ΠΎΡΡΡΠ²Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ, ΠΈΠ°ΠΊΠΎ ΡΠΈΠ΅ ΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ. ΠΠΊΠΎ ΡΠ° ΠΈΡΠΊΡΡΠΈΡΠ΅ ΠΎΠ²Π°Π° Π³ΡΠ΅ΡΠΊΠ°, ΡΠΎΠ³Π°Ρ ΡΡΠ΅Π±Π° ΡΠ°ΡΠ½ΠΎ Π΄Π° Π³ΠΈ ΠΎΡΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΎΠ΄ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° .csproj. Π‘Π΅ΠΏΠ°ΠΊ, ΡΓ¨ ΡΡΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΌΠ΅ Π²ΠΎ ΡΠΎΠ°, ΠΏΠ° ΠΏΡΠΎΡΠΈΡΠ°ΡΡΠ΅ ΠΏΠΎΠ½Π°ΡΠ°ΠΌΡ.
ΠΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ²Π°ΡΡΠ΅ Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ Π²ΠΎ ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠΎΡ Solution Explorer ΡΠΎ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ Π½Π° Π½Π°ΡΡΠ°Π²ΠΊΠ°ΡΠ° _2015 Π° ΠΏΠΎΡΠΎΠ° ΠΎΡΡΡΡΠ°Π½Π΅ΡΠ΅ Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠ²Π° Π΅ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΎ Π·Π° ΠΎΠ΄ΡΠΆΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ΅Π΄ΠΎΡ ΠΈ ΡΡΠ²ΡΡΠ²Π°ΡΠ° Π½Π° ΠΏΠ΅ΡΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΡΠΈΡΠ΅! ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ ΡΠ° ΠΏΠ°ΠΏΠΊΠ°ΡΠ° Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ²Π°ΡΡΠ΅ ΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ½Π°ΡΠ° ΠΏΠ°ΠΏΠΊΠ° ΡΠ°ΠΌΡ Π½Π° ΠΈΡΡ Π½Π°ΡΠΈΠ½ ΠΈ Π²ΡΠΈΡΠ°ΡΡΠ΅ Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ Π½Π°Π·Π°Π΄ Π²ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ.
ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ Π³ΠΎ ΠΌΠ΅Π½Π°ΡΠ΅ΡΠΎΡ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°. Π‘ΠΠ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΡΠ»ΠΎΠ±ΠΎΠ΄ΡΠ²Π°ΡΠ΅ Π²ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ, Π½Π΅ΠΌΠ° Π΄Π° Π±ΠΈΠ΄Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ, Π·Π°ΡΠΎΠ° Π³ΠΎ Π±ΡΠΈΡΠ΅ΠΌΠ΅. Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π½ΠΎΠ²ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠΎ ΠΈΠΌΠΈΡΠ° ΠΊΠΎΠΈ Π½ΠΈ ΡΠ΅ Π²Π΅ΡΠ΅ ΠΏΠΎΠ·Π½Π°ΡΠΈ R2015, R2016,, R2020. ΠΠ°Π±Π΅Π»Π΅ΠΆΠ΅ΡΠ΅ Π΄Π΅ΠΊΠ° Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΈ ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ ΠΎΠ΄ Π΄ΡΡΠ³ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ:
ΠΠ΄Π΅ΡΠ΅ Π²ΠΎ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° ΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΠΈ ΠΎΡΠ²ΠΎΡΠ΅ΡΠ΅ ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠΎ Π½Π°ΡΡΠ°Π²ΠΊΠ°ΡΠ° .csproj Π²ΠΎ ΡΡΠ΅Π΄ΡΠ²Π°Ρ ΠΏΠΎΠ³ΠΎΠ΄Π΅Π½ Π·Π° Π²Π°Ρ. ΠΠ°ΡΠ΅ΠΌ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ ΠΈ Π²ΠΎ Visual Studio - ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ ΡΠ°ΡΡΠΎΠ²Π°ΡΠ°ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΠΈ ΠΏΠΎΡΠΎΠ° ΡΠ°ΠΊΠ°Π½Π°ΡΠ° ΡΡΠ°Π²ΠΊΠ° ΡΠ΅ Π±ΠΈΠ΄Π΅ Π²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΡΠΎ ΠΌΠ΅Π½ΠΈ:
Π£ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ Π²ΠΎ Visual Studio Π΅ Π΄ΡΡΠΈ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΡΠ΅Π΄Π½ΠΈΠΊΠΎΡ ΠΈ ΠΏΠΎΡΠ°ΠΌΠ½ΡΠ²Π° ΠΈ ΠΏΡΠ°ΡΡΠ²Π°.
ΠΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠ΅ Π³ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ΅
ΠΠ΄Π΅ΡΠ΅ Π΄ΠΎ Π·Π°Π΅Π΄Π½ΠΈΡΠΊΠΈΠΎΡ (ΠΏΡΠ²ΠΈΠΎΡ) Π΅Π»Π΅ΠΌΠ΅Π½Ρ PropertyGroup ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ Π³ΠΎ ΠΈΠΌΠΎΡΠΎΡ ΠΠΌΠ΅ Π½Π° Π‘ΠΎΠ±ΡΠ°Π½ΠΈΠ΅ΡΠΎ β ΡΠ°ΠΊΠ° ΡΠ΅ Π²ΠΈΠΊΠ° ΡΠΎΠ±ΡΠ°Π½ΠΈΠ΅ΡΠΎ ΠΈ Π΄Π° Π³ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π±Π΅Π· Π½Π°ΡΡΠ°Π²ΠΊΠ° _2015. ΠΠΊΠΎ ΠΈΠΌΠ° Π½Π°ΡΡΠ°Π²ΠΊΠ°, ΡΠΎΠ³Π°Ρ ΠΎΡΡΡΡΠ°Π½Π΅ΡΠ΅ ΡΠ°.
ΠΠ°ΠΎΡΠ°ΡΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΡΠΎ ΡΡΠ»ΠΎΠ²
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
ΠΠ΅ Π½ΠΈ ΡΡΠ΅Π±Π° - Π³ΠΎ Π±ΡΠΈΡΠ΅ΠΌΠ΅.
ΠΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΎ ΡΠΎΡΡΠΎΡΠ±Π°
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π²ΠΎ ΡΠ°Π·Π° Π½Π° ΡΠ°Π·Π²ΠΎΡ Π½Π° ΠΊΠΎΠ΄ ΠΈ Π΄Π΅Π±Π°Π³ΠΈΡΠ°ΡΠ΅. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΡΠ²ΠΎΡΡΡΠ²Π° Π·Π° Π΄Π° ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°Π°Ρ Π½Π° Π²Π°ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈ - ΠΏΠΎΡΡΠ°Π²Π΅ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ·Π»Π΅Π·Π½ΠΈ ΠΏΠ°ΡΠ΅ΠΊΠΈ, ΠΌΠ΅Π½ΡΠ²Π°ΡΡΠ΅ ΡΠΈΠΌΠ±ΠΎΠ»ΠΈ Π·Π° ΡΡΠ»ΠΎΠ²Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ° ΠΈΡΠ½.
Π‘Π΅Π³Π° Π°ΡΠ΄Π΅ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ Π½ΠΎΠ²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ PropertyGroup Π·Π° Π½Π°ΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠΎ ΠΎΠ²ΠΈΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΡΡΠ΅Π±Π° ΡΠ°ΠΌΠΎ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠ΅ ΡΠ΅ΡΠΈΡΠΈ ΡΠ²ΠΎΡΡΡΠ²Π°:
- ΠΠ·Π»Π΅Π·Π½Π° ΠΏΠ°ΡΠ΅ΠΊΠ° β ΠΈΠ·Π»Π΅Π·Π½Π° ΠΏΠ°ΠΏΠΊΠ°. ΠΠ° ΠΏΠΎΡΡΠ°Π²ΠΈΠ² ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ binR20xx
- ΠΠ΅ΡΠΈΠ½ΠΈΡΠ°ΡΡΠ΅ ΠΠΎΠ½ΡΡΠ°Π½ΡΠΈ β ΡΠΈΠΌΠ±ΠΎΠ»ΠΈ Π·Π° ΡΡΠ»ΠΎΠ²Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ°. ΠΡΠ΅Π΄Π½ΠΎΡΡΠ° ΡΡΠ΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ Π½Π°Π²Π΅Π΄Π΅Π½Π° TRACE;R20Ρ Ρ
- TargetFrameworkVersion β Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ°. Π Π°Π·Π»ΠΈΡΠ½ΠΈ Π²Π΅ΡΠ·ΠΈΠΈ Π½Π° Revit API Π±Π°ΡΠ°Π°Ρ Π΄Π° ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΠ°Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ.
- ΠΠΌΠ΅ Π½Π° Π‘ΠΎΠ±ΡΠ°Π½ΠΈΠ΅ΡΠΎ β ΠΈΠΌΠ΅ Π½Π° ΡΠΊΠ»ΠΎΠΏΠΎΡ (Ρ.Π΅. ΠΈΠΌΠ΅ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°). ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠΎΡΠ½ΠΎΡΠΎ ΠΈΠΌΠ΅ Π½Π° ΡΠΊΠ»ΠΎΠΏΠΎΡ, Π½ΠΎ Π·Π° ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°ΠΌ Π΄Π° ΡΠ° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° $(AssemblyName)_20Ρ Ρ . ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΡΠ° ΠΎΡΡΡΡΠ°Π½ΠΈΠ²ΠΌΠ΅ Π½Π°ΡΡΠ°Π²ΠΊΠ°ΡΠ° ΠΎΠ΄ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠΊΠ»ΠΎΠΏΠΎΡ
ΠΠ°ΡΠ²Π°ΠΆΠ½Π°ΡΠ° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π½Π° ΡΠΈΡΠ΅ ΠΎΠ²ΠΈΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π΅ ΡΡΠΎ ΡΠΈΠ΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ΅ ΠΊΠΎΠΏΠΈΡΠ°Π°Ρ Π²ΠΎ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π±Π΅Π· Π²ΠΎΠΎΠΏΡΡΠΎ Π΄Π° ΡΠ΅ ΠΌΠ΅Π½ΡΠ²Π°Π°Ρ. ΠΠΎΠ΄ΠΎΡΠ½Π° Π²ΠΎ ΡΡΠ°ΡΠΈΡΠ°ΡΠ° ΡΠ΅ ΡΠ° ΠΏΡΠΈΠΊΠ°ΡΠ°ΠΌ ΡΠ΅Π»Π°ΡΠ° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° .csproj.
ΠΠΎΠ±ΡΠΎ, Π³ΠΈ ΡΡΠ°ΡΠΈΠ²ΠΌΠ΅ ΡΠ²ΠΎΡΡΡΠ²Π°ΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ - Π½Π΅ Π΅ ΡΠ΅ΡΠΊΠΎ. ΠΠΎ, ΡΡΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΡΠΎ ΠΏΡΠΈΠΊΠ»ΡΡΠΎΡΠΈ (ΠΏΠ°ΠΊΠ΅ΡΠΈ 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>
ΠΠ°Π±Π΅Π»Π΅ΠΆΠ΅ΡΠ΅ Π΄Π΅ΠΊΠ° Π²ΠΎ Π΅Π΄Π΅Π½ ΠΎΠ΄ ΡΡΠ»ΠΎΠ²ΠΈΡΠ΅ Π½Π°Π²Π΅Π΄ΠΎΠ² Π΄Π²Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠ΅ΠΊΡ ΠΠΠ. ΠΠ° ΠΎΠ²ΠΎΡ Π½Π°ΡΠΈΠ½ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π΅ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Debug.
Π ΡΡΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅ ΡΠ΅ΡΠΈΡΠΈ ΡΓ¨ ΡΠΎΠ²ΡΡΠ΅Π½ΠΎ. ΠΠΎ Π²ΡΠΈΡΡΠ²Π°ΠΌΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ Π½Π°Π·Π°Π΄, ΡΠ° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° ΡΡΠΎ Π½ΠΈ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½Π°, ΡΠ° ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°ΠΌΠ΅ ΡΡΠ°Π²ΠΊΠ°ΡΠ° β Π²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΡΠΎ ΠΌΠ΅Π½ΠΈ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ (Π½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ)ΠΡΠ°ΡΠ΅ΡΠ΅ Π³ΠΈ ΡΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ NuGetβΠ Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΡΠ΅ ΠΌΠ΅Π½ΡΠ²Π°Π°Ρ Π½Π°ΡΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ.
Π Π²ΠΎ ΠΎΠ²Π°Π° ΡΠ°Π·Π° Π΄ΠΎΡΠ΄ΠΎΠ² Π΄ΠΎ ΡΠΎΡΡΠΎΠΊΠ°ΠΊ - Π·Π° Π΄Π° Π³ΠΈ ΡΠΎΠ±Π΅ΡΠ΅ΠΌΠ΅ ΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΎΠ΄Π΅Π΄Π½Π°Ρ, ΠΌΠΎΠΆΠ΅Π²ΠΌΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΡΠ΅ΡΠΈΡΠΊΠΎ ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ (ΠΌΠ΅Π½ΠΈ "Π‘ΠΎΠ±ΡΠ°Π½ΠΈΠ΅Β»->Β«ΠΠ·Π³ΡΠ°Π΄Π±Π° Π½Π° ΡΠ΅ΡΠΈΡΠ°"), Π½ΠΎ ΠΊΠΎΠ³Π° ΡΠ΅ ΠΏΡΠ΅ΡΡΠ»Π°Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Π½Π΅ ΡΠ΅ Π²ΡΠ°ΡΠ°Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ. Π ΠΏΡΠΈ ΡΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ, ΠΎΠ²Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π΅ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π°, ΠΈΠ°ΠΊΠΎ, ΡΠ΅ΠΎΡΠ΅ΡΡΠΊΠΈ, ΡΡΠ΅Π±Π°. ΠΠ΅ Π½Π°ΡΠ΄ΠΎΠ² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΎΠ²ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°. Π Π½Π°ΡΠ²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ ΠΎΠ²Π° Π΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π³ΡΠ΅ΡΠΊΠ° Π½Π° Visual Studio.
ΠΠ°ΡΠΎΠ°, Π·Π° ΡΠ΅ΡΠΈΡΠΊΠΎ ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅, Π±Π΅ΡΠ΅ ΠΎΠ΄Π»ΡΡΠ΅Π½ΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π΅Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ ΡΠΈΡΡΠ΅ΠΌ Π·Π° ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅
ΠΠ½Π°ΡΠΈ, ΠΎΠ΄Π΅ΡΠ΅ Π²ΠΎ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ (Π½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ), Π΄ΡΠΆΠ΅ΡΠ΅ Π³ΠΎ ΠΊΠ»ΡΡΠΎΡ ΠΡΠ΅ΡΡΠ»Π°Ρ ΠΈ ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ ΡΠΎ Π΄Π΅ΡΠ½ΠΎΡΠΎ ΠΊΠΎΠΏΡΠ΅ Π½Π° ΠΏΡΠ°Π·Π΅Π½ ΠΏΡΠΎΡΡΠΎΡ Π²ΠΎ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° - Π²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΡΠΎ ΠΌΠ΅Π½ΠΈ ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠ° ΡΡΠ°Π²ΠΊΠ°ΡΠ° βΠΡΠ²ΠΎΡΠ΅ΡΠ΅ Π³ΠΎ ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠΎΡ PowerShell ΠΎΠ²Π΄Π΅".
ΠΠΊΠΎ Π³ΠΎ Π½Π΅ΠΌΠ°ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΎ Π½ΡΠΊΠ»Π΅Π°ΡΠΊΠ°, ΠΏΠΎΡΠΎΠ° ΠΏΡΠ²ΠΎ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°
dotnet tool install Nuke.GlobalTool βglobal
Π‘Π΅Π³Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π½ΡΠΊΠ»Π΅Π°ΡΠΊΠ° ΠΈ ΡΠ΅ Π²ΠΈ Π±ΠΈΠ΄Π΅ ΠΏΠΎΠ±Π°ΡΠ°Π½ΠΎ Π΄Π° Π³ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ Π½ΡΠΊΠ»Π΅Π°ΡΠΊΠ° Π·Π° ΡΠ΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠ΅ Π·Π½Π°ΠΌ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΎ Π½Π°ΠΏΠΈΡΠ°ΠΌ ΠΎΠ²Π° ΠΏΠΎΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π½Π° ΡΡΡΠΊΠΈ - Π½Π° Π°Π½Π³Π»ΠΈΡΠΊΠΈ ΡΠ΅ Π±ΠΈΠ΄Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΠ΅ ΠΌΠΎΠΆΠ°ΠΌ Π΄Π° ΡΠ° Π½Π°ΡΠ΄Π°ΠΌ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° .nuke. ΠΠ°Π»ΠΈ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π³ΡΠ°Π΄Π±Π°? [y/n]
ΠΡΠΈΡΠΈΡΠ½Π΅ΡΠ΅ Π³ΠΎ ΠΊΠΎΠΏΡΠ΅ΡΠΎ Y ΠΈ ΠΏΠΎΡΠΎΠ° ΡΠ΅ ΠΈΠΌΠ° ΡΡΠ°Π²ΠΊΠΈ Π·Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΈ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ. ΠΠΈ ΡΡΠ΅Π±Π° Π½Π°ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π°ΡΠ° ΠΎΠΏΡΠΈΡΠ° Π·Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ MSBuild, ΠΏΠ° ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ° ΠΎΠ΄ Π΅ΠΊΡΠ°Π½ΠΎΡ:
ΠΡΠ΄Π΅ Π΄Π° ΠΎΠ΄ΠΈΠΌΠ΅ Π²ΠΎ Visual Studio, ΠΊΠΎΠ΅ ΡΠ΅ Π½Π΅ ΠΏΠΎΡΡΠΈΠΊΠ½Π΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π΄Π° Π³ΠΎ Π²ΡΠΈΡΠ°ΠΌΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π½Π° Π½Π΅Π³ΠΎ Π΅ Π΄ΠΎΠ΄Π°Π΄Π΅Π½ Π½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠΎ Π²ΡΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄ΠΈ Π²ΠΎ ΠΊΠΎΡΠ° Π½Γ¨ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ° ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° - Build.cs
ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ ΡΠ° ΠΎΠ²Π°Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ° Π·Π° Π΄Π° Π³ΠΎ ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ Π·Π° ΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠ°, ΠΈΠ»ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π³ΠΎ ΠΌΠΎΡΠΎΡ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΡΡΠ΅Π΄ΠΈΡΠ΅ Π·Π° Π΄Π° ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° Π½Π° Π²Π°ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈ:
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. Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π»ΠΎΡ ΠΏΡΠ΅Π·Π΅Π½ΡΠΈΡΠ°Π½ ΠΎΠ²Π΄Π΅ ΡΠ΅ Π³ΠΈ Π½Π°ΡΠ΄Π΅ ΡΠ²ΠΎΠΈΡΠ΅ βΠΊΠ»ΠΈΠ΅Π½ΡΠΈβ.
ΠΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠΈΠΌΠ΅!
ΠΠ·Π²ΠΎΡ: www.habr.com