{"id":299638,"date":"2021-07-15T13:00:37","date_gmt":"2021-07-15T10:00:37","guid":{"rendered":"https:\/\/en.buradabiliyorum.com\/how-to-set-up-automated-deployments-to-your-servers-with-visual-studio-and-ftp-cloudsavvy-it\/"},"modified":"2021-07-15T13:00:37","modified_gmt":"2021-07-15T10:00:37","slug":"how-to-set-up-automated-deployments-to-your-servers-with-visual-studio-and-ftp-cloudsavvy-it","status":"publish","type":"post","link":"https:\/\/buradabiliyorum.com\/en\/how-to-set-up-automated-deployments-to-your-servers-with-visual-studio-and-ftp-cloudsavvy-it\/","title":{"rendered":"#How to Set Up Automated Deployments to Your Servers with Visual Studio and FTP \u2013 CloudSavvy IT"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a23a31d594ca\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #dd3333;color:#dd3333\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #dd3333;color:#dd3333\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a23a31d594ca\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-set-up-automated-deployments-to-your-servers-with-visual-studio-and-ftp-cloudsavvy-it\/#Publishing_via_FTP\" >Publishing via FTP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-set-up-automated-deployments-to-your-servers-with-visual-studio-and-ftp-cloudsavvy-it\/#Setting_Up_Visual_Studio\" >Setting Up Visual Studio<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-set-up-automated-deployments-to-your-servers-with-visual-studio-and-ftp-cloudsavvy-it\/#Setting_Up_Post-Build_Scripts_for_Other_Applications\" >Setting Up Post-Build Scripts for Other Applications<\/a><\/li><\/ul><\/nav><\/div>\n<p><strong>&#8220;#How to Set Up Automated Deployments to Your Servers with Visual Studio and FTP \u2013 CloudSavvy IT&#8221;<\/strong><\/p>\n<div id=\"article-content-area\">\n<img loading=\"lazy\" decoding=\"async\" class=\"type:primaryImage imgchk9 alignnone wp-image-5567 size-full\" srcset=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/07\/4e02f19e.png?width=398&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1 400w, https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/07\/4e02f19e.png?width=1198&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1 1200w\" sizes=\"auto, 400w, 1200w\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/07\/4e02f19e.png?width=398&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"Visual Studio.\" width=\"700\" height=\"300\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>Visual Studio has options to automatically publish your release build to remote servers over FTP. This can be very useful if you\u2019re deploying changes often or testing in a remote environment. We\u2019ll show you how to set it up and talk about how it works.<\/p>\n<h2 role=\"heading\" aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Publishing_via_FTP\"><\/span>Publishing via FTP<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>FTP is an old, <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/general\/\" data-internallinksmanager029f6b8e52c=\"3\" title=\"General\" target=\"_blank\" rel=\"noopener\">general<\/a>ly insecure protocol, but as long as your FTP server supports the modern extensions of FTPS, which uses TLS encryption, it should be fine. You can also chroot your FTP users so that they can only write to the target directory.<\/p>\n<p>You can read our guide to setting up an FTP server to learn more. You\u2019ll want to make sure that FTPS is set up and that regular FTP is disabled.<\/p>\n<p><strong>RELATED:<\/strong> <strong><em>How to Set Up a Linux FTP Server for Quick File Transfers<\/em><\/strong><\/p>\n<p>Not all types of builds are supported, though. Class libraries, for example, have no options to publish. ASP.NET Core <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/download-scripts-themes-apps\/\" data-internallinksmanager029f6b8e52c=\"9\" title=\"Download Scripts &amp; Themes &amp; Apps\" target=\"_blank\" rel=\"noopener\">app<\/a>lications are supported better and have options to publish to Azure and Docker.<\/p>\n<p>Luckily, for the applications that aren\u2019t supported, you can hook it up yourself, as Visual Studio also offers options to run post-build PowerShell scripts. These will run on build instead of on-publish, but you can just set up a custom \u201cpublish\u201d build profile with copied release settings.<\/p>\n<p>You can use these post-build scripts to make FTP or SCP transfers, or even to connect to external services like AWS S3 or a Docker Registry.<\/p>\n<h2 role=\"heading\" aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Setting_Up_Visual_Studio\"><\/span>Setting Up Visual Studio<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Under build, you should see an option to publish your solution. If you don\u2019t see this, you\u2019ll need to skip to the backup option of using post-build scripts.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12468 size-full\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2021\/07\/510548bb.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"Under build, you should see an option to publish your solution.\" width=\"484\" height=\"298\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>You\u2019ll need to make a new publish profile or edit the default one. Select FTPS Server, although you can publish to Azure, Docker, a local folder, or IIS web deploy if those work better for you.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12471 size-full\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2021\/07\/d6750281.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"Select FTPS Server, though you can publish to Azure, Docker, a local folder, or IIS web deploy if those work better for you.\" width=\"700\" height=\"332\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>Enter in the details of the connection. You\u2019ll need to give it a URL, a path to where it\u2019s going to upload, and a username\/password.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12470 size-full\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2021\/07\/f245b695.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"Enter in the details of the connection. You'll need to give it a URL, a path to where it's going to upload, and a username\/password.\" width=\"700\" height=\"489\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>Then, click publish, and you should see it transfer in the console after the build is complete. If it doesn\u2019t, you\u2019ll get an error or a log file where you can troubleshoot it.<\/p>\n<h2 role=\"heading\" aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Setting_Up_Post-Build_Scripts_for_Other_Applications\"><\/span>Setting Up Post-Build Scripts for Other Applications<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Visual Studio\u2019s built-in options are great, but when they don\u2019t work, you\u2019ll need to do a bit of scripting. Right-click your project and select \u201cProperties\u201d:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"imgchk9 alignnone wp-image-5563 size-full\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/07\/01940cee.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\" Visual Studio, right-click project, click &quot;Properties.&quot;\" width=\"485\" height=\"543\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>Then, under \u201cBuild Events,\u201d you can set up a post-build command. Note that this is cmd, so you\u2019ll need to manually call PowerShell, and this is also scoped to the output folder of the build, so if you\u2019re storing the PowerShell script at the root of your project, you might need to reference it a few directories up with <code>......<\/code>.<\/p>\n<p>Set it to run on post-build, and you can choose whether to run the script always, whenever it\u2019s successful, or whenever the build gets updated. If you\u2019re restarting servers or something, you\u2019ll only want to run the script when it\u2019s updated. Otherwise, select \u201con successful build\u201d unless you have a reason to be running the script when the build fails.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"imgchk9 alignnone wp-image-5565 size-full\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/07\/3c127624.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"Running prebuild and postbuild events.\" width=\"700\" height=\"691\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>PowerShell doesn\u2019t have built-in support for FTP. You have two options\u2014use <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/www.thomasmaurer.ch\/2019\/04\/setup-powershell-ssh-remoting-in-powershell-6\/\">PowerShell Remoting over SSH<\/a> to transfer to a Linux server, or use a PowerShell library for FTP.<\/p>\n<pre>$s = New-PSSession -HostName 123.123.123.123 -UserName ubuntu&#13;\nCopy-Item .example.txt \/home\/ubuntu -ToSession $s<\/pre>\n<p>If you need to use FTP, <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/winscp.net\/eng\/docs\/library_powershell\">WinSCP<\/a> can handle the transfer pretty easily.<\/p>\n<pre>Add-Type -Path \"WinSCPnet.dll\"&#13;\n$sessionOptions = New-Object WinSCP.SessionOptions&#13;\n$sessionOptions.ParseUrl(\"ftp:\/\/username:password@example.com\/\")&#13;\n&#13;\n$session = New-Object WinSCP.Session&#13;\n$session.Open($sessionOptions)&#13;\n&#13;\n$session.PutFiles(\"c:source*\", \"\/destination\/\").Check()&#13;\n&#13;\n$session.Dispose()<\/pre>\n<p>In either case, you\u2019ll need to make sure that your script has correct references to the proper file locations. If you click \u201cEdit Post-Build,\u201d you\u2019ll see a window listing all the variables that you can pass to your script.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"imgchk9 alignnone wp-image-5566 size-full\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/07\/5c309fe8.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\" &quot;Edit Post-Build&quot; variables.\" width=\"700\" height=\"671\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/>\n<\/div>\n<blockquote><p><strong><span style=\"color: #ff6600;\">If you liked the article, do not forget to share it with your friends. Follow us on\u00a0<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/news.google.com\/publications\/CAAqBwgKMLG0nwswvr63Aw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Google News<\/a><\/span>\u00a0too, click on the star and choose us from your favorites.<\/span><\/strong><\/p><\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\">For forums sites go to <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/forum.buradabiliyorum.com\/\" target=\"_blank\" rel=\"noopener\">Forum.BuradaBiliyorum.Com<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\"><strong>If you want to read more like this article, you can visit our <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/en.buradabiliyorum.com\/technology\/\" target=\"_blank\" rel=\"noopener\">Technology category.<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<p><span style=\"color: black;\"><a style=\"color: #ff9900;\" href=\"https:\/\/www.cloudsavvyit.com\/12467\/how-to-set-up-automated-deployments-to-your-servers-with-visual-studio-and-ftp\/\" target=\"_blank\" rel=\"noopener\">Source<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;#How to Set Up Automated Deployments to Your Servers with Visual Studio and FTP \u2013 CloudSavvy IT&#8221; Visual Studio has options to automatically publish your release build to remote servers over FTP. This can be very useful if you\u2019re deploying changes often or testing in a remote environment. We\u2019ll show you how to set it&#8230;<\/p>\n","protected":false},"author":1,"featured_media":299639,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/07\/4e02f19e.png","fifu_image_alt":"","footnotes":""},"categories":[18],"tags":[],"class_list":["post-299638","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology"],"_links":{"self":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/299638","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/comments?post=299638"}],"version-history":[{"count":0,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/299638\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media\/299639"}],"wp:attachment":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media?parent=299638"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/categories?post=299638"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/tags?post=299638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}