{"id":313426,"date":"2020-11-19T15:00:53","date_gmt":"2020-11-19T15:00:52","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=313426"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=313426","title":{"rendered":"\u041f\u043e\u0434\u0445\u043e\u0434 \u043a \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 .NET \u0432 TeamCity"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<p>\u041c\u044b \u0432 TeamCity \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u0435\u043b\u044f\u043b\u0438 \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 .NET, \u0435\u0433\u043e \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u0432 \u043d\u0430\u0448\u0435\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 .NET \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0434\u0435\u043c\u043e-\u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0445 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 .NET \u0432 TeamCity \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u00ab<a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/build-runner.html\">\u0440\u0430\u043d\u0435\u0440\u043e\u0432<\/a>\u00bb \u0438 \u00ab<a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/adding-build-features.html\">\u0431\u0438\u043b\u0434 \u0444\u0438\u0447\u0435\u0439<\/a>\u00bb. \u0420\u0430\u043d\u0435\u0440\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0431\u0438\u043b\u0434\u0430 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c \u0441\u043e\u0444\u0442\u043e\u043c, \u0430 \u0444\u0438\u0447\u0438 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0431\u0438\u043b\u0434\u0430.<\/p>\n<p>  <\/p>\n<p>\u0414\u043e \u0432\u0435\u0440\u0441\u0438\u0438 2020.1, TeamCity \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 .NET \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/msbuild.html\">MSBuild<\/a>\ufeff \u2013 \u0440\u0430\u043d\u0435\u0440 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 MSBuild \u0438 <a href=\"https:\/\/www.mono-project.com\/docs\/\">Mono<\/a> XBuild<\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/visual-studio-sln.html\">Visual Studio (sln)<\/a> \u2013 \u0440\u0430\u043d\u0435\u0440, \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 <a href=\"https:\/\/docs.microsoft.com\/en-us\/visualstudio\/ide\/reference\/devenv-command-line-switches\">Visual Studio IDE (devenv)<\/a>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f MSBuild<\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/visual-studio-2003.html\">Visual Studio 2003<\/a> \u2013 \u0442\u043e \u0436\u0435 \u0447\u0442\u043e \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u043d\u0435\u0440, \u043d\u043e \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0438 Visual Studio 2003<\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/visual-studio-tests.html\">Visual Studio Tests<\/a> \u2013 \u0440\u0430\u043d\u0435\u0440, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0449\u0438\u0439 Visual Studio \u0438 MS \u0442\u0435\u0441\u0442\u044b<\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/net-process-runner.html\">.NET Process Runner<\/a> \u2013 \u0440\u0430\u043d\u0435\u0440, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0449\u0438\u0439 .NET \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/teamcity\/2016\/11\/teamcity-dotnet-core\/\">.NET CLI Runner<\/a> \u2013 \u0440\u0430\u043d\u0435\u0440, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e TeamCity \u0438 <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/core\/tools\/\">.NET Core CLI<\/a><\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/nunit.html\">NUnit<\/a> \u2013 \u0440\u0430\u043d\u0435\u0440, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0449\u0438\u0439 NUnit-\u0442\u0435\u0441\u0442\u044b<\/li>\n<li>\u041d\u0430\u0431\u043e\u0440 \u0440\u0430\u043d\u0435\u0440\u043e\u0432 \u0434\u043b\u044f NuGet \u2013 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <a href=\"https:\/\/docs.microsoft.com\/en-us\/nuget\/consume-packages\/install-use-packages-nuget-cli\">nuget.exe CLI \u0434\u043b\u044f Windows<\/a><br \/> \n<ul>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/nuget-pack.html\">NuGet Pack<\/a><\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/nuget-publish.html\">NuGet Publish<\/a><\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/nuget-installer.html\">NuGet Installer<\/a><\/li>\n<\/ul>\n<\/li>\n<li>\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 TeamCity <a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/using-teamcity-as-nuget-feed.html#Enabling+NuGet+Feed\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 NuGet<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/JetBrains\/teamcity-symbol-server\">TeamCity symbol server<\/a> \u2013 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u0442 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e<\/li>\n<li>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 <a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/devops\/\">Azure DevOps<\/a> (\u0440\u0430\u043d\u0435\u0435 Team Foundation Server)<\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/duplicates-finder-resharper.html\">Duplicates Finder (ReSharper)<\/a> \u2013 \u043f\u043e\u0438\u0441\u043a \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430<\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/inspections-resharper.html\">Inspections (ReSharper)<\/a> \u2013 \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 <a href=\"https:\/\/www.jetbrains.com\/help\/resharper\/Code_Analysis__Code_Inspections.html\">JetBrains Resharper<\/a><\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/fxcop.html\">FxCop<\/a> \u2013 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 FxCop<\/li>\n<li><a href=\"https:\/\/github.com\/JetBrains\/teamcity-dottrace\">JetBrains dotTrace<\/a> \u2013 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 <a href=\"https:\/\/www.jetbrains.com\/help\/profiler\/Performance_Profiling__Profiling_Using_the_Command_Line.html\">dotTrace Command-Line Profiler<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotmemory\">JetBrains dotMemory Unit<\/a> \u2013 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u0438 \u0441 <a href=\"https:\/\/www.jetbrains.com\/dotmemory\/unit\/\">JetBrains dotMemory Unit<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/JetBrains\/teamcity-unity-plugin\">\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430<\/a> \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 3D-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 Unity<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u043e\u0435 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 TeamCity \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b .NET, \u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0438 \u043c\u0438\u043d\u0443\u0441\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0440\u0430\u043d\u0435\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u041e\u0421, \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0422\u0438\u043f \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/li>\n<li>\u0426\u0435\u043b\u0435\u0432\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430<\/li>\n<li>.NET-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a<\/li>\n<li>\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a<\/li>\n<li>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0438 \u0442.\u0434.<\/p>\n<p>  <\/p>\n<p>\u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0441 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c .NET Core \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u0438, Microsoft \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0438\u0441\u044c \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0432 \u0438\u0445 \u0432 <a href=\"https:\/\/github.com\/dotnet\/sdk\">.NET SDK<\/a>. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0441\u0442\u0430\u043b <a href=\"https:\/\/dotnet.microsoft.com\/download\/dotnet\/5.0\">.NET 5<\/a> \u2013 \u043e\u043d \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043b .NET Core, .NET Framework, Xamarin \u0438 Mono. \u0421 \u0432\u0435\u0440\u0441\u0438\u0438 2020.1 TeamCity \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043b \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0432\u043e\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0445 \u0437\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0432 \u043e\u0434\u0438\u043d \u0440\u0430\u043d\u0435\u0440 <a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/net.html\">.NET<\/a>. \u041e\u043d \u043a\u043e\u043d\u0441\u043e\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u043d\u0435\u0440\u043e\u0432 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u044b\u0448\u0435 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434. \u041c\u044b \u043d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 .NET \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u041d\u043e\u0432\u044b\u0439 \u0440\u0430\u043d\u0435\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041a\u043e\u043c\u0430\u043d\u0434\u044b <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/core\/tools\/\">.NET CLI<\/a><\/li>\n<li>Windows \u0438 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 MSBuild<\/li>\n<li>\u00ab\u0427\u0435\u0441\u0442\u043d\u044b\u0439\u00bb Visual Studio IDE (devenv)<\/li>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a Windows \u0438 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 NUnit \u0438 XUnit<\/li>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a Windows, .NET \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445<\/li>\n<li>\u041a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0434\u0430<\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/docker-wrapper.html\">Docker<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u0440\u0430\u043d\u0435\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043f\u043b\u0430\u0432\u043d\u0443\u044e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 \u0435\u0434\u0438\u043d\u044b\u0439 \u0440\u0430\u043d\u0435\u0440 .NET, \u043d\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043e\u043d\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c \u0443\u0447\u0435\u0441\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043d\u0430 .NET 5 \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0438 Visual Studio \u0438 <a href=\"https:\/\/www.jetbrains.com\/rider\/\">Rider<\/a>.<\/p>\n<p>  <\/p>\n<h2 id=\"struktura-demo-proekta\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0435\u043c\u043e-\u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h2>\n<p>  <\/p>\n<p>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438, \u0440\u0430\u043d\u0435\u0440 .NET \u2013 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0440\u0430\u043d\u043d\u0435\u0440\u0430 <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/9190--net-cli-support\">.NET CLI<\/a>. \u0412 \u043d\u0451\u043c \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043c\u0430\u0441\u0441\u0430 \u043d\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e .NET-\u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0415\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 TeamCity \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\">\u0432 \u044d\u0442\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>. \u0410 \u0443\u0436\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 TeamCity \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/teamcity.jetbrains.com\/project.html?projectId=DemoProjects_TeamCity_Net\">\u043d\u0430 \u044d\u0442\u043e\u043c \u0434\u0435\u043c\u043e-\u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0414\u0435\u043c\u043e-\u043f\u0440\u043e\u0435\u043a\u0442 .NET \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 .NET \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432:<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<tbody>\n<tr>\n<td align=\"left\">\n<p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u0422\u0438\u043f \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 TeamCity<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435<\/p>\n<p>  <\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\n<p><a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/tree\/master\/Clock\">Clock<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>.NET Standard 1.2<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043e\u0431\u0449\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u0438<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_Pack\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430<\/a><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_PublishToNuget\">NuGet \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>NuGet<\/p>\n<p>  <\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\n<p><a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/tree\/master\/Clock.IoC\">Clock.IoC<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>.NET Standard 1.2<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 IoC<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_Pack\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430<\/a><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_PublishToNuget\">NuGet \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>NuGet<\/p>\n<p>  <\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\n<p><a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/tree\/master\/Clock.Tests\">Clock.Tests<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>.NET 5.0<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u0422\u0435\u0441\u0442\u044b \u043e\u0431\u0449\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u0438<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_LinuxTests\">\u0422\u0435\u0441\u0442\u044b Windows<\/a><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_LinuxTests\">\u0422\u0435\u0441\u0442\u044b Linux<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u00a0<\/p>\n<p>  <\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\n<p><a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/tree\/master\/Clock.Console\">Clock.Console<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>.NET 5.0<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u041a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_BuildConsoleAndWebWindows64\">Windows x64<\/a><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_BuildConsoleAndWebLinux64\">Linux x64<\/a><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_PushConsoleWindows2004\">Docker Nanoserver<\/a><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_PushConsoleUbuntu2004\">Docker Ubuntu<\/a><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_PushConsoleMultiArch\">Docker multi-arch<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>Docker<\/p>\n<p>  <\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\n<p><a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/tree\/master\/Clock.Web\">Clock.Web<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>.NET 5.0<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>Web \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_BuildConsoleAndWebWindows64\">Windows x64<\/a><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_BuildConsoleAndWebLinux64\">Linux x64<\/a><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_PushWebWindows2004\">Docker Nanoserver<\/a><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_PushWebUbuntu2004\">Docker Ubuntu<\/a><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_PushWebMultiArch\">Docker multi-arch<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>Docker<\/p>\n<p>  <\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\n<p><a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/tree\/master\/Clock.Desktop\">Clock.Desktop<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>.NET 4.8 WPF<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u0414\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_BuildDesktop\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 Windows<\/p>\n<p>  <\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\n<p><a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/tree\/master\/Clock.Desktop.Uwp\">Clock.Desktop.Uwp<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>UAP<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p><a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/uwp\/\">UWP<\/a>-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_BuildDesktop\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 UWP<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u043f\u0430\u043a\u0435\u0442 UWP<\/p>\n<p>  <\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\n<p><a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/tree\/master\/Clock.Xamarin\">Clock.Xamarin<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>.NET Standard 1.2<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u041e\u0431\u0449\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 Xamarin<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_BuildAndroid\">C\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Android-\u043f\u0430\u043a\u0435\u0442\u0430<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u043f\u0430\u043a\u0435\u0442 Android<\/p>\n<p>  <\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\n<p><a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/tree\/master\/Clock.Xamarin.Android\">Clock.Xamarin.Android<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>Xamarin Android<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Android<\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p><a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_BuildAndroid\">C\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Android-\u043f\u0430\u043a\u0435\u0442\u0430<\/a><\/p>\n<p>  <\/td>\n<td align=\"left\">\n<p>\u043f\u0430\u043a\u0435\u0442 Android<\/p>\n<p>  <\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 CI\/CD-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0438 <a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/build-configuration.html\">\u0431\u0438\u043b\u0434-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439<\/a>. \u0425\u043e\u0442\u044f TeamCity \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0432\u0441\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 <a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/kotlin-dsl.html#How+to+Read+Files+in+Kotlin+DSL\">TeamCity Kotlin DSL<\/a>. \u0422\u0430\u043a \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0430 \u0437\u0430\u0442\u0435\u043c \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0438\u043c\u0438. \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0438\u0437\u0431\u0435\u0436\u0430\u0432 \u0440\u0443\u0447\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0434, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f DSL, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/blog.jetbrains.com\/teamcity\/2019\/03\/configuration-as-code-part-1-getting-started-with-kotlin-dsl\/\">\u0437\u0434\u0435\u0441\u044c<\/a> (\u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c).<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u0432 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c 2 \u0442\u0438\u043f\u0430 \u0430\u0433\u0435\u043d\u0442\u043e\u0432:<\/p>\n<p>  <\/p>\n<ul>\n<li>Windows 10 x64 Pro 10.0.19041<br \/> \n<ul>\n<li>Visual Studio 2019 Pro 16.8.1<\/li>\n<li>Docker (Windows container) 19.03.13<\/li>\n<li>.NET SDK 5.0<\/li>\n<\/ul>\n<\/li>\n<li>Ubuntu 16.04<br \/> \n<ul>\n<li>Docker 18.06.3<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b\u0438 \u043d\u0430 GitHub \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/tree\/master\/.teamcity\">Maven<\/a>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <a href=\"https:\/\/www.jetbrains.com\/idea\/\">IntelliJ IDEA<\/a> 2020.2.2 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0432\u0441\u0435\u0445 \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439: \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439 \u043a\u043e\u0434\u0430, \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u043e\u043c \u0438 \u0442.\u0434. \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0439, \u0432 \u0435\u0433\u043e DSL-\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 Kotlin.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/836\/b45\/39b\/836b4539b13fdcb7d5d562ac0a56b38a.png\"><\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0442 DSL-\u043a\u043e\u0434 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 <a href=\"https:\/\/teamcity.jetbrains.com\/project.html?projectId=DemoProjects_TeamCity_Net\">\u043f\u0440\u043e\u0435\u043a\u0442\u0443 .NET<\/a> \u0432 TeamCity. \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0443 \u0441\u0435\u0431\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 TeamCity \u0441 <a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/vcs-root.html\">VCS root<\/a>\u2019\u043e\u043c, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u043d\u0430 \u043d\u0430\u0448 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 DSL-\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438. \u0417\u0430\u0442\u0435\u043c, \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 Versioned Settings, \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u043e\u0440\u043c\u0430\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u201cKotlin\u201d:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d5a\/d31\/8e3\/d5ad318e3ee534d6d44d598c350d33f8.png\"><\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, TeamCity \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u0442 DSL-\u043a\u043e\u0434 \u0438 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438\u0437 \u043d\u0435\u0433\u043e.<\/p>\n<p>  <\/p>\n<p>\u0412 <a href=\"https:\/\/teamcity.jetbrains.com\/project.html?projectId=DemoProjects_TeamCity_Net\">\u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 .NET<\/a> \u0432\u0445\u043e\u0434\u044f\u0442 \u0434\u0432\u0430 \u043f\u043e\u0434\u043f\u0440\u043e\u0435\u043a\u0442\u0430: \u00abBuilding\u00bb \u0438 \u00abDeployment\u00bb. \u041e\u043d\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c \u0431\u0438\u043b\u0434-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ae1\/24d\/7da\/ae124d7da695a6149979a358918cfcee.png\"><\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u043d\u0438\u0445, \u043f\u0440\u044f\u043c\u043e \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 .NET \u043b\u0435\u0436\u0430\u0442 \u0434\u0432\u0435 \u043e\u0431\u0449\u0438\u0435 \u0431\u0438\u043b\u0434-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u2013 Build \u0438 Deploy. \u041f\u0435\u0440\u0432\u0430\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0430\u043a\u0435\u0442\u044b \u0438\u0437 \u043f\u043e\u0434\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/bda\/cd4\/aa8\/bdacd4aa8a712557d71e5db8aee48975.png\"><\/p>\n<p>  <\/p>\n<p>\u0432\u0442\u043e\u0440\u0430\u044f \u2013 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0438\u0445, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 Docker \u0438 NuGet:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/de9\/49e\/8fd\/de949e8fd4e3c5a2d97e368125f5c81b.png\"><\/p>\n<p>  <\/p>\n<p>\u0412\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0430\u0431\u043e\u0440 <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/uwp\/packaging\/auto-build-package-uwp-apps#configure-the-build-solution-build-task\">\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432<\/a>, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0432 .NET-\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 \u0432\u0438\u0434\u0435 \u043f\u0430\u0440 \u043a\u043b\u044e\u0447-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>\/p:key=value<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0431\u0438\u043b\u0434-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>system.configuration=Release<\/code>, \u0442\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>\/p:configuration=Release<\/code>. \u041f\u0440\u0435\u0444\u0438\u043a\u0441 <code>system.<\/code> \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 TeamCity \u043e\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0442\u0438\u043f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u0430 \u0437\u0430 \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u043c. \u0412\u0441\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u043d\u0430\u0448\u0438\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445 \u0441\u0431\u043e\u0440\u043a\u0438, \u043d\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b \u0434\u043b\u044f TeamCity \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e .NET:<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<tr>\n<td><\/td>\n<td><strong>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440<\/strong><\/td>\n<td><strong>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445 TeamCity<\/strong><\/td>\n<td><strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong><\/td>\n<\/tr>\n<tr>\n<td rowspan=\"3\"><strong>\u0412\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0431\u043e\u0440\u043a\u0438<\/strong><\/td>\n<td>configuration<\/td>\n<td>Release<\/td>\n<td><a href=\"https:\/\/docs.microsoft.com\/en-us\/visualstudio\/msbuild\/common-msbuild-project-properties\">MSBuild-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/a>.<\/td>\n<\/tr>\n<tr>\n<td>VersionPrefix<\/td>\n<td>1.0.0<\/td>\n<td>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a<a href=\"https:\/\/andrewlock.net\/version-vs-versionsuffix-vs-packageversion-what-do-they-all-mean\/#versionprefix\"> \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f<\/a> \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/td>\n<\/tr>\n<tr>\n<td>VersionSuffix<\/td>\n<td>beta%build.number%<\/td>\n<td>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a<a href=\"https:\/\/andrewlock.net\/version-vs-versionsuffix-vs-packageversion-what-do-they-all-mean\/#versionsuffix\"> \u043f\u0440\u0435\u0440\u0435\u043b\u0438\u0437\u043d\u0430\u044f \u043c\u0435\u0442\u043a\u0430<\/a> \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/td>\n<\/tr>\n<tr>\n<td><strong>Build console and web<\/strong><\/td>\n<td>InvariantGlobalization<\/td>\n<td>true<\/td>\n<td><a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/core\/run-time-config\/globalization#invariant-mode\">\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c<\/a>, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u043c \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0435.<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"2\"><strong>Build Windows desktop<\/strong><\/td>\n<td>PublishDir<\/td>\n<td>..\/bin\/Clock.Desktop\/win\/<\/td>\n<td>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0443\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/td>\n<\/tr>\n<tr>\n<td>AppxPackageDir<\/td>\n<td>..\/bin\/Clock.Desktop.Uwp\/win\/<\/td>\n<td>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442<a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/uwp\/packaging\/auto-build-package-uwp-apps#configure-the-build-solution-build-task\"> \u043f\u0443\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/a> \u043f\u0430\u043a\u0435\u0442\u0430 UWP \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"5\"><strong>Pack<\/strong><\/td>\n<td>Copyright<\/td>\n<td>Copyright 2020 JetBrains<\/td>\n<td rowspan=\"5\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/core\/tools\/csproj#nuget-metadata-properties\">\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435<\/a> NuGet-\u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/td>\n<\/tr>\n<tr>\n<td>Title<\/td>\n<td>TeamCity .NET sample<\/td>\n<\/tr>\n<tr>\n<td>RepositoryType<\/td>\n<td>git<\/td>\n<\/tr>\n<tr>\n<td>RepositoryUrl<\/td>\n<td>https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples.git<\/td>\n<\/tr>\n<tr>\n<td>RepositoryBranch<\/td>\n<td>refs\/heads\/master<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u042d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u041b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/uwp\/packaging\/auto-build-package-uwp-apps#configure-the-build-solution-build-task\">\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b<\/a> TeamCity, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043e \u0434\u0435\u0442\u0430\u043b\u044f\u0445 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u2013 TeamCity \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0441\u044f \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u0430\u043c. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<\/p>\n<p>  <\/p>\n<h4 id=\"konfiguracii-test-on-windows-i-test-on-linux\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u00abTest on Windows \u0438 Test on Linux\u00bb<\/h4>\n<p>  <\/p>\n<p>\u0414\u0432\u0435 \u044d\u0442\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u044e\u0442 \u043e\u0431\u0449\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 Windows \u0430\u0433\u0435\u043d\u0442\u0430 #1 \u0438 \u0432 Linux Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 <a href=\"https:\/\/hub.docker.com\/_\/microsoft-dotnet-sdk\/\">mcr.microsoft.com\/dotnet\/core\/sdk:5.0<\/a>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u0434\u0438\u043d \u0448\u0430\u0433 \u0441\u0431\u043e\u0440\u043a\u0438 .NET. \u0414\u043b\u044f \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f Linux Docker, \u0432 UI \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/823\/207\/f37\/823207f37c92ab35ba7f6c5c2ea705cc.png\"><\/p>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0442\u0435\u0441\u0442\u044b \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 Linux <a href=\"https:\/\/hub.docker.com\/_\/microsoft-dotnet-sdk\/\">Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435<\/a> \u0441 .NET SDK 5.0. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u043e\u0434 Windows \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Docker. <\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 Clock.Tests \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c .NET 5.0, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u0435\u0441\u0442\u043e\u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u043d\u043e\u0439 .NET Core CLI \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>test<\/code>. \u0414\u043b\u044f \u0441\u0431\u043e\u0440\u0430 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0434\u0430 JetBrains dotCover \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 <a href=\"https:\/\/www.nuget.org\/packages\/JetBrains.dotCover.DotNetCliTool\">JetBrains.dotCover.DotNetCliTool<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a <a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/installing-agent-tools.html\">\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 TeamCity<\/a>. \u0412 DSL, \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u043a\u0430 <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L110\">TestBase<\/a> \u0438 \u0434\u0432\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L185\">\u0442\u0435\u0441\u0442\u043e\u0432 \u043d\u0430 Linux<\/a> \u0438 \u0434\u043b\u044f <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L188\">\u0442\u0435\u0441\u0442\u043e\u0432 \u043d\u0430 Windows<\/a>.<\/p>\n<p>  <\/p>\n<h4 id=\"konfiguracii-build-console-and-web-for-win-x64-i-build-console-and-web-for-linux-x64\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u00abBuild console and web for win-x64\u00bb \u0438 \u00abBuild console and web for linux-x64\u00bb<\/h4>\n<p>  <\/p>\n<p>\u042d\u0442\u0438 \u0434\u0432\u0435 TeamCity \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L191\">Linux<\/a> \u0438 \u0434\u043b\u044f <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L194\">Windows<\/a> \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442 \u043f\u043e \u0434\u0432\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Clock.Console \u0438 Clock.Web \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0448\u0430\u0433\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u044d\u0442\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u043e\u0442 <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L137\">BuildConsoleAndWebBase<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u2013 <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L74\">BuildBase<\/a>. \u041e\u0431\u0430 \u0448\u0430\u0433\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432 \u043e\u0434\u0438\u043d, \u0443\u043a\u0430\u0437\u0430\u0432 \u0432 <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L168\">Projects<\/a> \u0441\u0440\u0430\u0437\u0443 \u0434\u0432\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043b\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043e\u0442 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L170\">outputDir<\/a>. \u0422\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0442 \u0442\u0438\u043f .NET 5.0, \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u043d\u043e\u0439 .NET Core CLI \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>publish<\/code>. <\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L166\">\u043f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433<\/a> \u0432 UI \u0434\u043b\u044f Linux, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u0440\u043e\u0438\u0442 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Clock.Console \u0432 \u0432\u0438\u0434\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 \u043f\u0430\u043f\u043a\u0443, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0432 \u043f\u043e\u043b\u0435 <em>Output directory<\/em>:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/776\/576\/702\/776576702597727e06d0376c303bfd42.png\"><\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f Windows, \u0434\u0430\u043d\u043d\u044b\u0439 \u0448\u0430\u0433 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435\u043c <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L169\">Runtime<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>win-x64<\/em>, \u0438 \u043f\u043e\u043b\u0435\u043c <em>Output directory<\/em> \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <em>bin\/Clock.Console\/win-x64<\/em>.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L172\">\u0412\u0442\u043e\u0440\u043e\u0439 \u0448\u0430\u0433<\/a> \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Clock.Web \u0434\u043b\u044f Linux \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0448\u0430\u0433\u0430, \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u0443\u0442\u0438 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043d\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443, \u043f\u043e\u043b\u0435\u043c <em>Output directory<\/em> \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <em>bin\/Clock.Web\/linux-x64<\/em>. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0448\u0430\u0433\u043e\u0432, TeamCity <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L180\">\u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442<\/a> \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0431\u0438\u043b\u0434\u0430.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f <em>win-x64<\/em>:<\/p>\n<p>  <\/p>\n<ul>\n<li>bin\/Clock.Console\/win-x64\/Clock.Console<\/li>\n<li>bin\/Clock.Console\/win-x64\/Clock.Web<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0414\u043b\u044f <em>linux-x64<\/em>:<\/p>\n<p>  <\/p>\n<ul>\n<li>bin\/Clock.Console\/linux-x64\/Clock.Console<\/li>\n<li>bin\/Clock.Console\/linux-x64\/Clock.Web<\/li>\n<\/ul>\n<p>  <\/p>\n<h4 id=\"konfiguraciya-build-windows-desktop\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u00abBuild Windows desktop\u00bb<\/h4>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u043e <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L215\">\u043e\u0434\u0438\u043d \u0448\u0430\u0433<\/a>:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/639\/d24\/256\/639d242568b32771de788a675712cd25.png\"><\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0448\u0430\u0433\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f Windows MSBuild \u0438\u0437 Visual Studio 2019 \u043d\u0430 \u0430\u0433\u0435\u043d\u0442\u0435 #1 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u00ab\u0442\u0430\u0440\u0433\u0435\u0442\u043e\u0432\u00bb Restore, Rebuild \u0438 Publish \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432:<\/p>\n<p>  <\/p>\n<ul>\n<li>Clock.Desktop\/Clock.Desktop.csproj<\/li>\n<li>Clock.Desktop.Uwp\/Clock.Desktop.csproj<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0431\u043e\u0440\u043e\u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 PublishDir (\u0434\u043b\u044f Clock.Desktop) \u0438 AppxPackageDir (\u0434\u043b\u044f Clock.Desktop.Uwp). \u042d\u0442\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0434\u0430\u043b\u0435\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0431\u0438\u043b\u0434\u0430.<\/p>\n<p>  <\/p>\n<h4 id=\"konfiguraciya-build-android-app\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u00abBuild Android app\u00bb<\/h4>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L233\">\u042d\u0442\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/a> \u0441\u0442\u0440\u043e\u0438\u0442 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Android, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Windows MSBuild \u0438\u0437 Visual Studio 2019, \u043d\u0430 \u0430\u0433\u0435\u043d\u0442\u0435 #1:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f32\/442\/7ee\/f324427eeffd5d4e8171956ff2e5955b.png\"><\/p>\n<p>  <\/p>\n<p>\u041e\u043d\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043d\u043e \u0432\u043c\u0435\u0441\u0442\u043e MSBuild \u00ab\u0442\u0430\u0440\u0433\u0435\u0442\u0430\u00bb Publish \u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u00ab\u0442\u0430\u0440\u0433\u0435\u0442\u00bb SignAndroidPackage, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 Android-\u043f\u0430\u043a\u0435\u0442.<\/p>\n<p>  <\/p>\n<h4 id=\"konfiguraciya-pack\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u00abPack\u00bb<\/h4>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L256\">\u042d\u0442\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/a> \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0434\u0432\u0430 NuGet-\u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0434\u0438\u043d \u0448\u0430\u0433 .NET CLI \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>pack<\/code>, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u2013 Clock \u0438 Clock.IoC:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/5e9\/e4f\/1fc\/5e9e4f1fc0fc5e40c920643483e322ea.png\"><\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f NuGet-\u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043a\u0430\u043a \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0442\u0438\u043f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438 \u0442.\u0434., \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L267\">\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b<\/a> \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 TeamCity \u2013 \u0438\u0445 \u0441\u043f\u0438\u0441\u043e\u043a \u0435\u0441\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432\u044b\u0448\u0435. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L282\">\u0432 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u0445<\/a> \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f NuGet-\u043f\u0430\u043a\u0435\u0442\u044b, \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<h4 id=\"konfiguraciya-build\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u00abBuild\u00bb<\/h4>\n<p>  <\/p>\n<p>\u042d\u0442\u0430 \u043e\u0441\u043e\u0431\u0430\u044f <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L288\">\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/a> TeamCity \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0448\u0430\u0433\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438. \u041e\u043d\u0430 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u043e\u0434\u0438\u043d TeamCity-\u0431\u0438\u043b\u0434 \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L296\">\u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438<\/a> \u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0431\u043e\u0440\u043a\u0438:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/368\/6d4\/c7a\/3686d4c7a3200be8d6bea720dd2279b5.png\"><\/p>\n<p>  <\/p>\n<h4 id=\"konfiguraciya-deploy\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u00abDeploy\u00bb<\/h4>\n<p>  <\/p>\n<p>\u042d\u0442\u043e <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L506\">\u043f\u043e\u0445\u043e\u0436\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/a> \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0448\u0430\u0433\u043e\u0432, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e <a href=\"https:\/\/github.com\/JetBrains\/teamcity-dotnet-samples\/blob\/dcf1430a234193455b51758deb34c7f14c7496cc\/.teamcity\/settings.kts#L510\">\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438<\/a> \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li><em>Push image \u2026<\/em> \u0441\u0442\u0440\u043e\u0438\u0442 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0437\u044b \u0434\u043b\u044f Linux \u0438 Windows<\/li>\n<li><em>Push multi-arch image \u2026<\/em> \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b \u0434\u043b\u044f <a href=\"https:\/\/www.docker.com\/blog\/multi-arch-build-and-images-the-simple-way\/\">\u043c\u0443\u043b\u044c\u0442\u0438-\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 Docker<\/a>.<\/li>\n<li><em>Publish to NuGet<\/em> \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 NuGet \u043f\u0430\u043a\u0435\u0442\u044b \u0432 <a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/using-teamcity-as-nuget-feed.html\">TeamCity NuGet<\/a>.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0435 NuGet-\u043f\u0430\u043a\u0435\u0442\u044b \u0441 \u043e\u0431\u0449\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/teamcity.jetbrains.com\/guestAuth\/app\/nuget\/feed\/DemoProjects_TeamCity\/clock\/v2\">\u044d\u0442\u043e\u0442<\/a> NuGet-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a. \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 Clock.Console \u0432 Docker \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">docker pull nikolayp\/clock-console docker run -it --rm nikolayp\/clock-console<\/code><\/pre>\n<p>  <\/p>\n<p>\u0410 \u0434\u043b\u044f Clock.Web:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">docker pull nikolayp\/clock-web docker run -it --rm -p 5000:5000 nikolayp\/clock-web<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435, \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"http:\/\/localhost:5000\/\">http:\/\/localhost:5000\/<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0412\u0441\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0430\u043a\u0435\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u0445 <a href=\"https:\/\/teamcity.jetbrains.com\/viewType.html?buildTypeId=DemoProjects_TeamCity_Net_Build\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  <\/p>\n<h2 id=\"zaklyuchenie\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<p>Microsoft \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442 <a href=\"https:\/\/dotnet.microsoft.com\/download\/dotnet\/5.0\">.NET 5<\/a>, \u0432\u0435\u0434\u044c \u043e\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0438 \u0435\u0434\u0438\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439. \u041c\u044b \u0432 TeamCity \u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u0448 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0435\u0440 .NET \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 .NET 5 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0439.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0443\u0436\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u043d\u0435\u0440 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043c\u043d\u0435\u043d\u0438\u0435\u043c \u043e \u043d\u0435\u043c, \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u0412\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0434\u044b \u0432\u0430\u0448\u0435\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438.<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/528916\/\"> https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/528916\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<p>\u041c\u044b \u0432 TeamCity \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u0435\u043b\u044f\u043b\u0438 \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 .NET, \u0435\u0433\u043e \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u0432 \u043d\u0430\u0448\u0435\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 .NET \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0434\u0435\u043c\u043e-\u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0445 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-313426","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/313426","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=313426"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/313426\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=313426"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=313426"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=313426"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}