Subscribe: Scott Hanselman's Computer Zen
Added By: Feedage Forager Feedage Grade A rated
Language: English
app  code  core  docker  dotnet  machine  microsoft  net core  net  new  state  synology  version  visual studio  windows 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: Scott Hanselman's Computer Zen

Scott Hanselman's Blog

Scott Hanselman on Programming, User Experience, The Zen of Computers and Life in General


I suck at vacation - What I did this week

Thu, 01 Dec 2016 08:20:09 GMT

Well, it seems I'm lousy at vacation. I'm still learning what I'm supposed to do. My wife is working and the kids are still in school so here was my week. 3D Printed Brackets for my new HTC Vive I treated myself to an HTC Vive Room-Scale VR system. I'll blog extensively about this later but let me just tell you. It's AMAZING. I've used Google Cardboard, I've used Gear VR, I've used Oculus. Vive is it. Full Room-scale VR with something like the Doom 3 VR Mode is amazing. This fellow has a version of Doom 3 coded up at GitHub that modifies your existing purchased version and adds a REALLY compelling VR experience. I will say spent less time fighting demons and more time looking closely at wall textures. I admit it. There's a joke about folks who have 3D Printers. We just end up printing brackets to hold stuff.  Well, I got a Vive so I wanted a nice way to mount it. Problem solved. I dig #3Dprinting because you can make EXACTLY the brackets you need in a few hours! A photo posted by Scott Hanselman (@shanselman) on Nov 25, 2016 at 11:40pm PST Basically I've been just making stuff and fixing stuff around the house. I even sat in a café and read the news. Madness. I wonder if I could do this full time? I guess that's called retirement. ;) Sponsor: Big thanks to Octopus Deploy! Do you deploy the same application multiple times for each of your end customers? The team at Octopus have taken the pain out of multi-tenant deployments. Check out their latest 3.4 release© 2016 Scott Hanselman. All rights reserved.       [...]

Docker on a Synology NAS - Also running ASP.NET and .NET Core!

Tue, 29 Nov 2016 20:52:45 GMT

I love my Synology NAS (Network Attached Storage) device. It has sat quietly in my server closet for almost 5 years now. It was a fantastic investment. I've filled it with 8TB of inexpensive Seagate Drives and it does its own flavor of RAID to give me roughly 5TB (which, for my house is effectively infinite) of storage. In my house it's just \\SERVER or http://server. It's a little GNU Linux machine that is easier to manage and maintain (and generally deal with) that just chills in the closet. It's a personal cloud. It also runs: Plex - It's a media server with over 15 years of home movies and photos. It's even more magical when used with an Xbox One. It transcodes videos that then download to my Windows tablets or iPad...then I watch them offline on the plane. VPN Server - I can remotely connect to my house. Even stream Netflix when I'm overseas. Surveillance Station - It acts as a DVR and manages streams from a dozen cameras both inside and outside the house, scanning for motion and storing nearly a week of video. Murmur/Mumble Server - Your own private VOIP chat service. Used for podcasts, gaming, private calls that aren't over Skype, etc. Cloud Sync/Backup - I have files in Google Drive, Dropbox, and OneDrive...but I have them entirely backed up on my Synology with their Cloud Sync. Every year my Synology gets better with software upgrades. The biggest and most significant upgrade to Synology has been the addition of Docker and the Docker ecosystem. There is first class support for Docker on Synology. There are some Synology devices that are cheaper and use ARM processors. Make sure you get one with an Intel processor for best compatibility. Get the best one you can and you'll find new uses for it all the time! I have the 1511 (now 1515) and it's amazing. ASP.NET Core on Docker on Synology A month ago Glenn Condron and I did a Microsoft Virtual Academy on Containers and Cross-Platform .NET (coming soon!) and we made this little app and put it in Docker. It's "glennc/fancypants." That means I can easily run it anywhere with just:docker run glennc/fancypants Sometimes a DockerFile for ASP.NET Core can be as basic as this:FROM microsoft/aspnetcore:1.0.1ENTRYPOINT ["dotnet", "WebApplication4.dll"]ARG source=.WORKDIR /appEXPOSE 80COPY $source . You could certainly use Docker Compose and have your Synology running Redis, MySql, ASP.NET Core, whatever. Even better, since Synology has such a great UI, here is Glenn's app in the Synology web-based admin tool:   I can ssh into the Synology (you'll need to SSH in as root, or you'll want to set up Docker to allow another user to avoid this) and run docker commands directly, or I can use their excellent UI. It's really one of the nicest Docker UIs I've seen. I was able to get ASP.NET Core and the Node Ghost blog running in minutes with modest RAM requirements. Once Containers exist in Docker on Synology you can "turn them on and off" like any service. This also means that your Synology can now run any Docker-based service like a private version of GitLab (good instructions here)! You could then (if you like) do cool domain mappings like and have your Synology do the work. The Synology could then run Jenkins or Travis as well which makes my home server fit nicely into my development workflow without use any compute resources on my main machine (or using any cloud resource at all!) The next step for me will be to connect to Docker running on Synology remotely from my Windows machine, then setup "F5 Docker Debugging" in Visual Studio. Anyone else using a Synology? * My Amazon links pay for tacos. Please use them. Sponsor: Big thanks to Octopus Deploy! Do you deploy the same application multiple times for each of your end customers? The team at Octopus have taken the pain out of multi-tenant deployments. Check out their latest 3.4 release! © 2016 Scott Hanselman. All rights reserved.       [...]

Publishing ASP.NET Core 1.1 applications to Azure using git deploy

Wed, 23 Nov 2016 12:13:00 GMT

I took an ASP.NET Core 1.0 application and updated its package references to ASP.NET 1.1 today. I also updated to my SDK to the Current (not the LTS - Long Term Support version). Everything worked great building and running locally, but then I made a new Web App in Azure and did a quick git deploy. Basically:c:\aspnetcore11app> azure site create "aspnetcore11test" --location "West US" --gitc:\aspnetcore11app> git add .c:\aspnetcore11app> git commit -m "initial"c:\aspnetcore11app> git push azure master Then I watched the logs go by. You can watch them at the command line or from within the Azure Portal under "Log Stream." The deployment failed when Azure was building the app and got this error:Build started 11/25/2016 6:51:54 AM. 2016-11-25T06:51:55 1>Project "D:\home\site\repository\aspnet1.1.xproj" on node 1 (Publish target(s)). 2016-11-25T06:51:55 1>D:\home\site\repository\aspnet1.1.xproj(7,3): error MSB4019: The imported project "D:\Program Files (x86)\dotnet\sdk\1.0.0-preview3-004056\Extensions\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Props" was not found. Confirm that the path in the declaration is correct, and that the file exists on disk. 2016-11-25T06:51:55 1>Done Building Project "D:\home\site\repository\aspnet1.1.xproj" (Publish target(s)) -- FAILED. 2016-11-25T06:51:55 See where it says "1.0.0-preview3-004056" in there? Looks like Azure Web Apps has some build that isn't the one that I have. Theirs has the new csproj/msbuild stuff and I'm staying a few steps back waiting for things to bake. Remember that unless you specify the SDK version, .NET Core will use whatever is the latest one on the box. Well, what do I have locally?C:\aspnetcore11app>dotnet --version1.0.0-preview2-1-003177 OK, then that's what I need to use so I'll make a global.json at the root of my project, then move my code into a folder under "src" for example. { "projects": [ "src", "test" ], "sdk": { "version": "1.0.0-preview2-1-003177" }} Here I'm "pinning" the same SDK version. This will tell Azure (or you, if I gave you the code) to use this SDK version when building. Now I'll redeploy with a git add, commit, and push. It works. I think this should be easier, but I'm not sure how it should be easier. Does this mean that everyone should have a global.json with a preferred version? If you have no preferred version should Azure give a smarter error if it has an incompatible newer one? The learning here for me is that not having a global.json basically says "*.*" to any cloud build servers and you'll get whatever latest SDK they have. It could stop working any day. Sponsor: Big thanks to Octopus Deploy! Do you deploy the same application multiple times for each of your end customers? The team at Octopus have taken the pain out of multi-tenant deployments. Check out their latest 3.4 release!© 2016 Scott Hanselman. All rights reserved.       [...]

The 2016 Christmas List of Best STEM Toys for your little nerds and nerdettes

Sat, 19 Nov 2016 12:47:00 GMT

Last year my 9 year old asked, "are we nerds yet?" Being a nerd doesn't have the negative stigma it once did. A nerd is a fan, and everyone should be enthusiastic about something. You might be a gardening nerd or a woodworking nerd. In this house, we are Maker Nerds. We've been doing some 3D Printing lately, and are trying to expand into all kinds of makings. NOTE: We're gearing up for another year of March Is For Makers coming soon in March of 2017. Now is a great time for you to catch up on the last two year's amazing content with made in conjunction with! Here's a Christmas List of things that I've either personally purchased, tried for a time, or borrowed from a friend. These are great toys and products for kids of all genders and people of all ages. Sphero Star Wars BB-8 App Controlled Robot Sphero was a toy the kids got for Christmas last year that they are still playing with. Of course, there's the Original Sphero that's just a white ball with zero personality. I remember when it  came out and I was like, "meh, ok." But then Star Wars happened and I tell ya, you add a little head on the thing and give it some personality and it's a whole new toy. The Sphero team continues to update the firmware and software inside BB-8 even now and recently added a new "Sphero Force Band" so you can control Sphero with gestures. However, the best part is that Sphero supports a new system called "The SPRK Lightning Lab" (available for Android, iOS, or other devices) that lets kids program BB-8 directly! It's basically Scratch for BB-8. You can even use a C-style language called OVAL when you outgrow their Scratchy system. Meccano Micronoids I grew up in a world of Lincoln Logs and Erector Sets. We were always building something with metal and screws. Well, sets like this still exist with actual screws and metal...they just include more plastic than before. Any of these Meccano sets are super fun for little builders. They are in some ways cooler than LEGO for my kids because of the shear size of them. The Meccano Meccanoid 2.0 is HUGE at almost two feet tall. It's got 6 motors and there's three ways to program it. There's a large variety of Meccano robot and building kids from $20 on up, so they fit most budgets. Arduino UNO Project Super Starter Kit from Elegoo Arduino Kits are a little touch and go. They usually say things like "1000 pieces!"...but they count all the resistors and screws as a single part. Ignore that and try to look at the underlying pieces and the possibilities. Things move quickly and you'll sometimes need to debug Arudino Programs or search for updates but the fundamentals are great for kids 8-13. I particularly like this Elegoo Arduino UNO Starter Kit as it includes everything you'll need and more to start playing immediately. If you can swing a little more money you can add on touchscreens, speakers, and even a little robot car kit, although the difficulty ratchets up. Snap Circuits I recommended these before on twitter, and truly, I can't sing about them enough. I love Snap Circuits and have blogged about them before on my blog. We quickly outgrew the 30 parts in the Snap Circuits Jr. Even though it has 100 projects, I recommend you get the Snap Circuits SC-300 that has 60 parts and 300 projects, or do what we did and just get the Snap Circuits Extreme SC-750 that has 80+ parts and 750 projects. I like this one because it includes a computer interface (via your microphone jack, so any old computer will work!) as well as a Solar Panel. In 2016 Snap Circuits added a new "3D" kit that lets you build not just on a flat surface but expands building up walls! If you already have a SnapCircuits kit, remember that they all work together so you can pick this one up as well and combine them! Secret Messages Kit It's a fact - little kids LOVE secret messages. My kids are always doing secret notes with lemon juice as invisible ink. This kit brings a ton of "hidden writing systems" together in one inexpens[...]

WinAppDriver - Test any app with Appium's Selenium-like tests on Windows

Wed, 16 Nov 2016 18:03:48 GMT

I've found blog posts on my site where I'm using the Selenium Web Testing Framework as far back as 2007! Today there's Selenium Drivers for every web browser including Microsoft Edge. You can write Selenium tests in nearly any language these days including Ruby, Python, Java, and C#. I'm a big Selenium fan. I like using it with systems like BrowserStack to automate across many different browser on many operating systems. "Appium" is a great Selenium-like testing framework that implements the "WebDriver" protocol - formerly JsonWireProtocol. WebDriver is a remote control interface that enables introspection and control of user agents. It provides a platform- and language-neutral wire protocol as a way for out-of-process programs to remotely instruct the behavior of web browsers. From the Appium website, "Appium is 'cross-platform': it allows you to write tests against multiple platforms (iOS, Android, Windows), using the same API. This enables code reuse between iOS, Android, and Windows testsuites" Appium is a webserver that exposes a REST API. The WinAppDriver enables Appium by using new APIs that were added in Windows 10 Anniversary Edition that allow you to test any Windows app. That means ANY Windows App. Win32, VB6, WPF, UWP, anything. Not only can you put any app in the Windows Store, you can do full and complete UI testing of those apps with a tool that is already familiar to Web Developers like myself. You can write tests in C# and run them from Visual Studio's Test Runner. You can press any button and basically totally control your apps.// Launch the calculator appDesiredCapabilities appCapabilities = new DesiredCapabilities();appCapabilities.SetCapability("app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App");CalculatorSession = new RemoteWebDriver(new Uri(WindowsApplicationDriverUrl), appCapabilities);Assert.IsNotNull(CalculatorSession);CalculatorSession.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));// Make sure we're in standard modeCalculatorSession.FindElementByXPath("//Button[starts-with(@Name, \"Menu\")]").Click();OriginalCalculatorMode = CalculatorSession.FindElementByXPath("//List[@AutomationId=\"FlyoutNav\"]//ListItem[@IsSelected=\"True\"]").Text;CalculatorSession.FindElementByXPath("//ListItem[@Name=\"Standard Calculator\"]").Click(); It's surprisingly easy once you get started.public void Addition(){ CalculatorSession.FindElementByName("One").Click(); CalculatorSession.FindElementByName("Plus").Click(); CalculatorSession.FindElementByName("Seven").Click(); CalculatorSession.FindElementByName("Equals").Click(); Assert.AreEqual("Display is 8 ", CalculatorResult.Text);} You can automate any part of Windows, even the Start Menu or Cortana.var searchBox = CortanaSession.FindElementByAccessibilityId("SearchTextBox");Assert.IsNotNull(searchBox);searchBox.SendKeys("What is eight times eleven");var bingPane = CortanaSession.FindElementByName("Bing");Assert.IsNotNull(bingPane);var bingResult = bingPane.FindElementByName("88");Assert.IsNotNull(bingResult); If you use "AccessibiltyIds" and refer to native controls in a non-locale specific way you can even reuse test code across platforms. For example, you could write sign in code for Windows, iOS, your web app, and even a VB6 Win32 app. ;) Appium and WebAppDriver a nice alternative to "CodedUI Tests." CodedUI tests are great but just for Windows apps. If you're a web developer or you are writing cross platform or mobile apps you should check it out. WinAppDriver Issues & Samples Learn more about Appium UI Test Automation for Browsers and Apps Using the WebDriver Standard Sponsor: Help your team write better, shareable SQL faster! Discover how your whole team can write better, shareable SQL faster with a free trial of SQL Prompt. Write, refactor and share SQL effortlessly, try it now.© 2016 Scott Hanselman. All rights reserved.       [...]

Visual Studio Code just keeps getting better - with extensions

Tue, 15 Nov 2016 05:57:17 GMT

I've been a fan of Visual Studio Code (the free code editor) since it was released. But even though it continues to update itself as I use it, I didn't really grok how much cool stuff has been going on under the hood. As of this writing. VSCode is on version 1.7.1. Here's the highlights of this new version: Horizontal layout - Organize your editors in either vertical or horizontal groups. Keyboard Shortcuts Reference - New printable keyboard shortcuts PDF cheat sheet. CSS autocompletion within HTML - Get rich auto completions for CSS embedded in your HTML. Debug hit count control - Set breakpoint hit count conditions. Simplified Node debugging - Easily configure your Node debugging sessions. Keymaps for Sublime and Atom - You can now use these well-known keyboard shortcuts in VS Code. Disable extensions - Quickly disable an Extension globally or for a specific workspace. Improved TypeScript and JavaScript Grammar - The Dark+ themes now colorize variable and function references. Extension Packs - View dependencies of an extension pack right in the extension details. But the REAL star and the REAL magic in VS Code - IMHO - is the growing VS Code Extension Gallery/Marketplace. Go check it out, but here's just a taste of the cool stuff that plugs nicely into Visual Studio Code. Great Visual Studio Code Extensions Docker Support - This extension adds syntax highlighting, snippets and additional intellisense for Dockerfiles and docker-compose files in Visual Studio Code. Cordova Tools - Code-hinting, debugging and integrated commands for Apache Cordova (PhoneGap). With added support for the Ionic framework. Java Support from RedHat - Language Support for Java for Visual Studio Code provided by Red Hat  Sublime Text Keybindings - Use Visual Studio Code with all your Sublime Text hotkeys! HTML Extensions for VS Code - Everything you need, HTML5 snippets, CSS/JS formatters, HTMLHint and more. TONS of themes - Make VS Code look however you want. Debug your code running in Google Chrome from VS Code - Yes. Read it again. Get it. Bash Debugger - Debug those massive bash scripts you know you have. Vim Emulation - Why not? :wq! Pretty Icons - Add a little flair PHP Debugging - Deeply useful. Language Support - There is SO much here. Every language you can think of. PHP, Go, Ruby, C#, C++, JS, Rust and more. What are your favorite VS Code extensions? Sponsor: Big thanks to Telerik! They recently published a comprehensive whitepaper on The State of C#, discussing the history of C#, what’s new in C# 7 and whether C# is still a viable language. Check it out!© 2016 Scott Hanselman. All rights reserved.       [...]

Stateless 3.0 - A State Machine library for .NET Core

Fri, 11 Nov 2016 06:53:03 GMT

State Machines and business processes that describe a series of states seem like they'll be easy to code but you'll eventually regret trying to do it yourself. Sure, you'll start with a boolean, then two, then you'll need to manage three states and there will be an invalid state to avoid then you'll just consider quitting all together. ;) "Stateless" is a simple library for creating state machines in C# code. It's recently been updated to support .NET Core 1.0. They achieved this not by targeting .NET Core but by writing to the .NET Standard. Just like API levels in Android abstract away the many underlying versions of Android, .NET Standard is a set of APIs that all .NET platforms have to implement. Even better, the folks who wrote Stateless 3.0 targeted .NET Standard 1.0, which is the broadest and most compatible standard - it basically works everywhere and is portable across the .NET Framework on Windows, .NET Core on Windows, Mac, and LInux, as well as Windows Store apps and all phones. Sure, there's Windows Workflow, but it may be overkill for some projects. In Nicholas Blumhardt's words: ...over time, the logic that decided which actions were allowed in each state, and what the state resulting from an action should be, grew into a tangle of if and switch. Inspired by Simple State Machine, I eventually refactored this out into a little state machine class that was configured declaratively: in this state, allow this trigger, transition to this other state, and so-on. You can use state machines for anything. You can certainly describe high-level business state machines, but you can also easily model IoT device state, user interfaces, and more. Even better, Stateless also serialize your state machine to a standard text-based "DOT Graph" format that can then be generated into an SVG or PNG like this with It's super nice to be able to visualize state machines at runtime. Modeling a Simple State Machine with Stateless Let's look at a few code examples. You start by describing some finite states as an enum, and some finite "triggers" that cause a state to change. Like a switch could have On and Off as states and Toggle as a trigger. A more useful example is the Bug Tracker included in the Stateless source on GitHub. To start with here are the states of a Bug and the Triggers that cause state to change:enum State { Open, Assigned, Deferred, Resolved, Closed }enum Trigger { Assign, Defer, Resolve, Close } You then have your initial state, define your StateMachine, and if you like, you can pass Parameters when a state is trigger. For example, if a Bug is triggered with Assign you can pass in "Scott" so the bug goes into the Assigned state - assigned to Scott.State _state = State.Open;StateMachine _machine;StateMachine.TriggerWithParameters _assignTrigger;string _title;string _assignee; Then, in this example, the Bug constructor describes the state machine using a fluent interface that reads rather nicely.public Bug(string title){ _title = title; _machine = new StateMachine(() => _state, s => _state = s); _assignTrigger = _machine.SetTriggerParameters(Trigger.Assign); _machine.Configure(State.Open) .Permit(Trigger.Assign, State.Assigned); _machine.Configure(State.Assigned) .SubstateOf(State.Open) .OnEntryFrom(_assignTrigger, assignee => OnAssigned(assignee)) .PermitReentry(Trigger.Assign) .Permit(Trigger.Close, State.Closed) .Permit(Trigger.Defer, State.Deferred) .OnExit(() => OnDeassigned()); _machine.Configure(State.Deferred) .OnEntry(() => _assignee = null) .Permit(Trigger.Assign, State.Assigned);} For example, when the State is Open, it can be Assigned. But as this is written (you can change it) you can't close a Bug that is Open but not Assi[...]

The mystery of dotnet watch and 'Microsoft.NETCore.App', version '1.1.0-preview1-001100-00' was not found

Thu, 03 Nov 2016 05:38:40 GMT

WARNING: This post is full of internal technical stuff. I think it's interesting and useful. You may not. I had an interesting Error/Warning happen when showing some folks .NET Core recently and I thought I'd deconstruct it here for you, Dear Reader, because it's somewhat multi-layered and it'll likely help you. It's not just about Core, but also NuGet, Versioning, Package Management in general, version pinning, "Tools" in .NET Core, as well as how .NET Runtimes work and version. That's a lot! All that from this little warning. Let's see what's up. First, let's say you have .NET Core installed. You likely got it from and you have either 1.0.0 or the 1.0.1 update. Then say you have a website, or any app at all. I made one with "dotnet new -t web" in an empty folder. I added "dotnet watch" as a tool in the project.json like this. NOTE the "1.0.0-*" there. "tools": { "Microsoft.DotNet.Watcher.Tools": "1.0.0-*"} dotnet watch is nice because it watches the source code underneath it while running your app. If you change your code files, dotnet-watch will notice, and exit out, then launch "dotnet run" (or whatever, even test, etc) and your app will pick up the changes. It's a nice developer convenience. I tested this out on last weekend and it worked great. I went to show some folks on Monday that same week and got this error when I typed "dotnet watch."C:\Users\scott\Desktop\foofoo>dotnet watchThe specified framework 'Microsoft.NETCore.App', version '1.1.0-preview1-001100-00' was not found. - Check application dependencies and target a framework version installed at: C:\Program Files\dotnet\shared\Microsoft.NETCore.App - The following versions are installed: 1.0.0 1.0.1 - Alternatively, install the framework version '1.1.0-preview1-001100-00'. Let's really look at this. It says "the specified framework...1.1.0" was not found. That's weird, I'm not using that one. I check my project.json and I see:"Microsoft.NETCore.App": { "version": "1.0.1", "type": "platform"}, So who wants 1.1.0? I typed "dotnet watch." Can I "dotnet run?"C:\Users\scott\Desktop\foofoo>dotnet runProject foofoo (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missingCompiling foofoo for .NETCoreApp,Version=v1.0Hosting environment: ProductionContent root path: C:\Users\scott\Desktop\foofooNow listening on: http://localhost:5000Application started. Press Ctrl+C to shut down. Hey, my app runs fine. But if I "dotnet watch" I get an error. Remember that dotnet watch and other "tools" like it are not dependencies per se, but helpful sidecar apps. Tools can watch, squish css and js, precompile views, and do general administrivia that isn't appropriate at runtime. It seems it's dotnet watch that wants something I don't have. Now, I could go install the framework 1.1.0 that it's asking for, and the error would disappear, but would I know why? That would mean dotnet watch would use .NET Core 1.1.0 but my app (dotnet run) would use 1.0.1. That's likely fine, but is it intentional? Is it deterministic and what I wanted? I'll open my generated project.lock.json. That's the calculated tree of what we ended up with after dotnet restore. It's a big calculated file but I can easily search it. I see two things. The internal details aren't interesting but version strings are. First, I search for "dotnet.watcher" and I see this:"projectFileToolGroups": {".NETCoreApp,Version=v1.0": [ "Microsoft.AspNetCore.Razor.Tools >= 1.0.0-preview2-final", "Microsoft.AspNetCore.Server.IISIntegration.Tools >= 1.0.0-preview2-final", "Microsoft.DotNet.Watcher.Tools >= 1.0.0-*", "Microsoft.EntityFrameworkCore.Tools >= 1.0.0-preview2-final", "Microsoft.Extensions.SecretManager.Tools >= 1.0.0-preview2-final", "Microsoft.VisualStudio.Web.CodeGeneration.Tools >= 1.0.0-preview2-final"] Ah, that's a remind[...]