Principal Software Engineer at Allscipts in Malvern, Pennsylvania, Microsoft Windows Dev MVP, Husband, Dad and Geek.
59979 stories

How To Setup Your Local Node.js Development Environment Using Docker

1 Share

Docker is the defacto toolset for building modern applications and setting up a CI/CD pipeline – helping you build, ship and run your applications in containers on-prem and in the cloud. 

Whether you’re running on simple compute instances such as AWS EC2 or Azure VMs or something a little more fancy like a hosted Kubernetes service like AWS EKS or Azure AKS, Docker’s toolset is your new BFF. 

But what about your local development environment? Setting up local dev environments can be frustrating to say the least.

Remember the last time you joined a new development team?

You needed to configure your local machine, install development tools, pull repositories, fight through out-of-date onboarding docs and READMEs, get everything running and working locally without knowing a thing about the code and it’s architecture. Oh and don’t forget about databases, caching layers and message queues. These are notoriously hard to set up and develop on locally.

I’ve never worked at a place where we didn’t expect at least a week or more of on-boarding for new developers. 

So what are we to do? Well, there is no silver bullet and these things are hard to do (that’s why you get paid the big bucks) but with the help of Docker and it’s toolset, we can make things a whole lot easier.

In Part I of this tutorial we’ll walk through setting up a local development environment for a relatively complex application that uses React for it’s front end, Node and Express for a couple of micro-services and MongoDb for our datastore. We’ll use Docker to build our images and Docker Compose to make everything a whole lot easier.

If you have any questions, comments or just want to connect. You can reach me in our Community Slack or on twitter at @pmckee.

Let’s get started.


To complete this tutorial, you will need:

Fork the Code Repository

The first thing we want to do is download the code to our local development machine. Let’s do this using the following git command:

git clone

Now that we have the code local, let’s take a look at the project structure. Open the code in your favorite IDE and expand the root level directories. You’ll see the following file structure.

├── docker-compose.yml
├── notes-service
│   ├── config
│   ├── node_modules
│   ├── nodemon.json
│   ├── package-lock.json
│   ├── package.json
│   └── server.js
├── reading-list-service
│   ├── config
│   ├── node_modules
│   ├── nodemon.json
│   ├── package-lock.json
│   ├── package.json
│   └── server.js
├── users-service
│   ├── Dockerfile
│   ├── config
│   ├── node_modules
│   ├── nodemon.json
│   ├── package-lock.json
│   ├── package.json
│   └── server.js
└── yoda-ui
    ├── node_modules
    ├── package.json
    ├── public
    ├── src
  └── yarn.lock

The application is made up of a couple simple microservices and a front-end written in React.js. It uses MongoDB as it’s datastore.

Typically at this point, we would start a local version of MongoDB or start looking through the project to find out where our applications will be looking for MongoDB.

Then we would start each of our microservices independently and then finally start the UI and hope that the default configuration just works.

This can be very complicated and frustrating. Especially if our micro-services are using different versions of node.js and are configured differently.

So let’s walk through making this process easier by dockerizing our application and putting our database into a container. 

Dockerizing Applications

Docker is a great way to provide consistent development environments. It will allow us to run each of our services and UI in a container. We’ll also set up things so that we can develop locally and start our dependencies with one docker command.

The first thing we want to do is dockerize each of our applications. Let’s start with the microservices because they are all written in node.js and we’ll be able to use the same Dockerfile.

Create Dockerfiles

Create a Dockerfile in the notes-services directory and add the following commands.

This is a very basic Dockerfile to use with node.js. If you are not familiar with the commands, you can start with our getting started guide. Also take a look at our reference documentation.

Building Docker Images

Now that we’ve created our Dockerfile, let’s build our image. Make sure you’re still located in the notes-services directory and run the following command:

docker build -t notes-service.

Now that we have our image built,  let’s run it as a container and test that it’s working.

docker run –rm -p 8081:8081 –name notes notes-service

Looks like we have an issue connecting to the mongodb. Two things are broken at this point. We didn’t provide a connection string to the application. The second is that we do not have MongoDB running locally.

At this point we could provide a connection string to a shared instance of our database but we want to be able to manage our database locally and not have to worry about messing up our colleagues’ data they might be using to develop. 

Local Database and Containers

Instead of downloading MongoDB, installing, configuring and then running the Mongo database service. We can use the Docker Official Image for MongoDB and run it in a container.

Before we run MongoDB in a container, we want to create a couple of volumes that Docker can manage to store our persistent data and configuration. I like to use the managed volumes that docker provides instead of using bind mounts. You can read all about volumes in our documentation.

Let’s create our volumes now. We’ll create one for the data and one for configuration of MongoDB.

docker volume create mongodb
docker volume create mongodb_config

Now we’ll create a network that our application and database will use to talk with each other. The network is called a user defined bridge network and gives us a nice DNS lookup service which we can use when creating our connection string.

docker network create mongodb

Now we can run MongoDB in a container and attach to the volumes and network we created above. Docker will pull the image from Hub and run it for you locally.

docker run -it –rm -d -v mongodb:/data/db -v mongodb_config:/data/configdb -p 27017:27017 –network mongodb –name mongodb mongo

Okay, now that we have a  running mongodb, we also need to set a couple of environment variables so our application knows what port to listen on and what connection string to use to access the database. We’ll do this right in the docker run command.

docker run \
-it –rm -d \
–network mongodb \
–name notes \
-p 8081:8081 \
-e SERVER_PORT=8081 \
-e SERVER_PORT=8081 \
-e DATABASE_CONNECTIONSTRING=mongodb://mongodb:27017/yoda_notes \ notes-service

Let’s test that our application is connected to the database and is able to add a note.

curl –request POST \
–url http://localhost:8081/services/m/notes \
  –header ‘content-type: application/json’ \
  –data ‘{
“name”: “this is a note”,
“text”: “this is a note that I wanted to take while I was working on writing a blog post.”,
“owner”: “peter”

You should receive the following json back from our service.

{“code”:”success”,”payload”:{“_id”:”5efd0a1552cd422b59d4f994″,”name”:”this is a note”,”text”:”this is a note that I wanted to take while I was working on writing a blog post.”,”owner”:”peter”,”createDate”:”2020-07-01T22:11:33.256Z”}}


Awesome! We’ve completed the first steps in Dockerizing our local development environment for Node.js.

In Part II of the series, we’ll take a look at how we can use Docker Compose to simplify the process we just went through.

In the meantime, you can read more about networking, volumes and Dockerfile best practices with the below links:

The post How To Setup Your Local Node.js Development Environment Using Docker appeared first on Docker Blog.

Read the whole story
4 hours ago
West Grove, PA
Share this story

Simplifying Grids In Xamarin.Forms

1 Share

In Xamarin.Forms, the Grid is a powerful layout container where we can use rows and columns to place controls.

Historically, we would declare our rows and columns using the Grid.RowDefinitions or Grid.ColumnDefinitions properties. To create a row or column, we would define a new RowDefinition or ColumnDefinition element and specify its size:

<Grid VerticalOptions="FillAndExpand">
          <ColumnDefinition Width="*"/>
          <ColumnDefinition Width="2*"/>
          <ColumnDefinition Width="Auto"/>
          <ColumnDefinition Width="300"/>
          <RowDefinition Height="1*"/>
          <RowDefinition Height="Auto"/>
          <RowDefinition Height="25"/>
          <RowDefinition Height="14"/>
          <RowDefinition Height="20"/>

Introduced in Xamarin.Forms v4.7, developers can declare grid row and columns using a comma-separated list of values. The simplified format for declaring and makes declaring .

With this new simplified format, our previous example becomes:

<Grid VerticalOptions="FillAndExpand"
        RowDefinitions="1*, Auto, 25, 14, 20"
        ColumnDefinitions="*, 2*, Auto, 300">

Using the new format, we removed a significant amount of XAML and made our row and column definitions terser. Adding a new row or column becomes as simple as adding another comma separated value, making makes our code easier to understand and easier to maintain.

Beautiful stuff! 😍

Migrating To Simplified Rows/Columns

To help you convert your grids to the new format, we introduced the Convert to attribute format refactoring into MFractor Professional.

This refactoring converts your existing row and column definitions into the new simplified format:

Using the convert to attribute format refactoring

As grid row/column shorthand format was introduced in Xamarin.Forms 4.7, the Convert To Attribute Format refactoring will not appear in lower versions of Xamarin.Forms

To learn more about this refactoring, please see our documentation.

Read the whole story
4 hours ago
West Grove, PA
Share this story

Building a path to success for microservices and .NET Core - Project Tye + GitHub Actions

1 Share

Project Tye is an experimental developer tool that the .NET team is working on to make the experience of creating, testing and deploying microservices and distributed apps easier.  


If you've done any work in this space over the past many years you've no doubt seen the changes in technology and tools; Docker Swarm, Mesosphere, Kubernetes, and various tools and configuration options that more than likely caused some sort of pain.


The goals of Tye are to help make the development easier by running many services with a single command, options for using containers or not, service discovery by convention, and simplifying deployment to Kubernetes with minimal knowledge and/or configuration.


In March, the team gave a quick overview during the .NET Community StandUp



Getting Started

There are a number of resources for getting up and running.  



Tye is a .NET global tool and is installed using the command


dotnet tool install -g Microsoft.Tye --version "0.3.0-alpha.20319.3"



After installing the tye global tool, we can now create and run single and multiple services using the dotnet CLI commands.


# Create a Razor Pages App dotnet new razor -n frontend # Create a WebAPI App dotnet new webapi -n backend # Create the Solution file and add the projects dotnet new sln -n microservices dotnet sln add frontend backend



Typically when creating multiple applications and wanting to run them all together there is usually some Dockerfile(s) involved, references, nginx.conf files etc.


With tye, that is handled for you. Just use the following:


tye run --dashboard



Using the --dashboard option automatically opens the tye dashboard web application and displayed the two applications, ports, logs and other information running. 



There is some work to be done to connect the backend and frontend applications, see the steps here for that work.


Deploying your application

Once you've successfully run the applications locally, the next step is to push your services and apps to your cluster. There are a few requirements:

  • Docker for your OS
  • Container registry for the images that are produced, tagged and pushed prior to deployment to the cluster. i.e. Azure Container Registry, Docker Hub, GitHub etc.
  • A Kubernetes Cluster like AKS for example.

Once all of these are setup, use the deploy command with the --interactive option.


tye deploy --interactive



You'll be prompted for your container registry and if you have configured an ingress controller; you may be asked about deployment options for this as well.


Once complete, you can use the standard commands from kubectl to inspect pods, services and deployments.


> kubectl get pods NAME READY STATUS RESTARTS AGE backend-ccdfd756f-xk2w2 1/1 Running 0 5m frontend-84dfdf4f7d-6r5vb 1/1 Running 0 5m



Using tye deploy is a quick and easy motion to publish your things to the cloud, but is it the method we'd want to continually do for production? Or even QA and Test? What would it look like to use tye and a CI/CD system together?


Deploying your application with GitHub Actions

This sample uses the frontend/backend sample from a above but also adds an ingress controller to the cluster to expose a public IP address for the frontend application. The GitHub action will use tye in conjunction with an Azure Kubernetes Service (AKS) cluster and Azure Container Registry (ACR).


Before setting up the action, create the AKS with the proper integration with the ACR instance.


az aks create -n mytyecluster -g mytyegroup --generate-ssh-keys --attach-acr myregistry --node-count 3



Below is the tye.yaml configuration file created using tye init allowing for specifying the registry name as well as the ingress instance and routes to deploy.


name: microservice registry: ingress: - name: ingress bindings: - port: 8080 rules: - path: / service: frontend - path: /backend service: backend services: - name: frontend project: frontend/frontend.csproj replicas: 2 - name: backend project: backend/backend.csproj



Running locally using tye run works as we'd expect, browsing the tye dashboard you should see the applications and the ingress similar to the following.


GitHub Action

Setting up the GitHub Action requires a few actions to compose the complete integration.

First, the name of the AKS cluster, resource group, and container registry are set as Environment variables.





Next, ensure that the version of .NET Core and tye are installed.


- name: 🧰 Setup .NET Core uses: actions/setup-dotnet@v1.5.0 with: dotnet-version: 3.1.300 - name: Install Tye tools run: | dotnet tool install -g Microsoft.Tye --version "0.2.0-alpha.20258.3"



Using the name of the registry and the Azure docker action to login to your registry. This step is needed prior to running the deploy command which will build and push the images to the registry.


- name: Login to ACR uses: Azure/docker-login@v1 with: login-server: ${{ env.ACR_RESOURCE_URI }} username: ${{ secrets.ACR_USER }} password: ${{ secrets.ACR_PASSWORD }}



Next, we need to set the current context for our AKS cluster. Use Azure aks-set-context action for this.


- name: Set AKS context uses: azure/aks-set-context@v1 with: creds: '${{ secrets.AZURE_CREDENTIALS }}' cluster-name: ${{ env.AZURE_AKS_CLUSTER }} resource-group: ${{ env.AKS_RESOURCE_GROUP }}



When deploying manually you can use the --interactive option and the tye CLI will detect the configuration, inspect the cluster and ask/prompt for deployment. However, in this case it is automated and we need to deploy it as a part of the action.


We can just use a run action and apply the standard ingress from tye.


- name: Install ingress-nginx run: | kubectl apply -f



 Finally, deploy the application!


- name: ☸ tye deploy run: | tye deploy -v Debug



The complete action looks like the following snippet:


name: Build and Deploy on: [push] env: AZURE_AKS_CLUSTER: mytyecluster AKS_RESOURCE_GROUP: mytyegroup ACR_RESOURCE_URI: jobs: build: if: github.event_name == 'push' && contains(toJson(github.event.commits), '***NO_CI***') == false && contains(toJson(github.event.commits), '[ci skip]') == false && contains(toJson(github.event.commits), '[skip ci]') == false name: tye deploy runs-on: ubuntu-latest steps: - name: ✔ Checkout uses: actions/checkout@v2 - name: 🧰 Setup .NET Core uses: actions/setup-dotnet@v1.5.0 with: dotnet-version: 3.1.300 - name: Install Tye tools run: | dotnet tool install -g Microsoft.Tye --version "0.3.0-alpha.20319.3" - name: Login to ACR uses: Azure/docker-login@v1 with: login-server: ${{ env.ACR_RESOURCE_URI }} username: ${{ secrets.ACR_USER }} password: ${{ secrets.ACR_PASSWORD }} - name: Set AKS context uses: azure/aks-set-context@v1 with: creds: '${{ secrets.AZURE_CREDENTIALS }}' cluster-name: ${{ env.AZURE_AKS_CLUSTER }} resource-group: ${{ env.AKS_RESOURCE_GROUP }} - name: Install ingress-nginx run: | kubectl apply -f - name: ☸ tye deploy run: | tye deploy -v Debug




Viewing the deployed application

Using kubectl, look for the ingress-nginx namespace and LoadBalancer TYPE to find the external IP address for the frontend application.


> kubectl get all -n ingress-nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/ingress-nginx-controller LoadBalancer 80:31128/TCP,443:31740/TCP 9m service/ingress-nginx-controller-admission ClusterIP <none> 443/TCP 9m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/ingress-nginx-controller 1/1 1 1 9m




Please file any issues on the dotnet/tye repo, feel free to reach out to me on twitter @spboyer or ask questions here in post! 

Read the whole story
4 hours ago
West Grove, PA
Share this story

Cumulative Update #21 for SQL Server 2017 RTM

1 Share

The 21th cumulative update release for SQL Server 2017 RTM is now available for download at the Microsoft Downloads site. Please note that registration is no longer required to download Cumulative updates.
To learn more about the release or servicing model, please visit:

Starting with SQL Server 2017, we are adopting a new modern servicing model. Please refer to our blog for more details on Modern Servicing Model for SQL Server

Read the whole story
4 hours ago
West Grove, PA
Share this story

Announcing Windows 10 Insider Preview Build 20161

1 Share

Hello Windows Insiders, today we’re releasing Windows 10 Insider Preview Build 20161 to Windows Insiders in the Dev Channel.

A few quick notes:

First—as a reminder, these builds are from our Active Development Branch and are not tied to any upcoming Windows 10 release. Insiders in the Dev Channel are getting the latest code from our engineers.

Second—we have officially rolled out channels to the Windows Insider Program Settings page, If you haven’t already, check out our blog post here outlining the transition from rings to channels.

And third—we’re introducing some cool new features in today’s build, however many of these features are rolling out to a subset of Insiders in the Dev Channel at first, to help us quickly identify issues that may impact performance and reliability. This means Insiders may not see some of these features right away, but rest assured they will be gradually rolled out to everyone in the Dev Channel. Check out what the team has been working on!

What’s new in Build 20161

Theme-aware tiles in Start

We are freshening up the Start menu with a more streamlined design that removes the solid color backplates behind the logos in the apps list and applies a uniform, partially transparent background to the tiles. This design creates a beautiful stage for your apps, especially the Fluent Design icons for Office and Microsoft Edge, as well as the redesigned icons for built-in apps like Calculator, Mail, and Calendar that we started rolling out earlier this year.

Before and After: Windows 10 Start menu in dark theme.

This refined Start design looks great in both dark and light theme, but if you’re looking for a splash of color, first make sure to turn on Windows dark theme and then toggle “Show accent color on the following surfaces” for “Start, taskbar, and action center” under Settings > Personalization > Color to elegantly apply your accent color to the Start frame and tiles.

Windows 10 Start menu in dark theme.

Windows 10 Start menu in light theme.

Windows 10 Start menu in colorful theme.

Want the amazing desktop background shown in the screenshot above? Download our ‘Pride 2020 Flags’ theme from the Microsoft Store!

ALT + TAB between apps and sites

Are you a multitasker? We have exciting news for you! Beginning with today’s build, all tabs open in Microsoft Edge will start appearing in Alt + TAB, not just the active one in each browser window. We’re making this change so you can quickly get back to whatever you were doing—wherever you were doing it.

All tabs open in Microsoft Edge will start appearing in Alt + TAB!

If you’d prefer fewer tabs or the classic Alt + TAB experience, we’ve added some settings for you under Settings > System > Multitasking. You can configure Alt + Tab to only show your last three or five tabs or choose to turn this feature off completely.

This feature is currently rolling out to a subset of Insiders today in the Dev Channel and requires a Canary or Dev build of Microsoft Edge (version 83.0.475.0 or higher).

This is just the beginning of productivity enhancements coming to Microsoft Edge—stay tuned!

A more personalized Taskbar for new users

We want to help customers get the most out of their PCs from day one, and that starts with offering a cleaner, more personalized, out-of-box experience to give you the content you want and less clutter. This provides us with a flexible, cloud-driven infrastructure to test customer reception of default Taskbar content and tailor these layouts based on user and device signal.

We will evaluate the performance of individual default properties, monitoring diagnostic data and user feedback to assess an audience’s reception. Using this information, we will tune default layouts to minimize clutter and perceptions of bloatware.

Please note that this experience is limited to new account creation or first logon scenarios. We will not use Programmable Taskbar to alter the Taskbar layout on existing accounts.

Tailored default Taskbars for different users.

Improving the notification experience

We are making some changes to improve the notifications experience in Windows 10.

First, know where your toast is coming from by checking out the app logo at the top. Done with the notification? Select the X on the top right corner to quickly dismiss and move on with your life.

Notification toast with app logo at the top and X on the top right corner to quickly dismiss.

And second, we are turning off the Focus Assist notification and summary toast by default, so we will no longer let users know that Focus Assist has been turned on through an automatic rule via a notification. This can be changed back to the previous behavior via Settings.

Making Settings even better

We’re continuing to work on bringing capabilities from Control Panel forward into Settings. As part of this ongoing effort, we are migrating information found in Control Panel’s System page into the Settings About page under Settings > System > About. Links that would open the System page in Control Panel will now direct you to About in Settings. We are also bringing new improvements like making your device information copyable and streamlining the security information shown. And don’t worry—if you’re looking for more advanced controls that lived in the System page in Control Panel, you can still get to them from the modern About page if you need them!

Device information is now copyable and security information is streamlined under Settings > System > About.

There will be more improvements coming that will further bring Settings closer to Control Panel. If you rely on settings that only exist in Control Panel today, please file feedback and let us know what those settings are.

Improving the tablet experience for 2-in-1 devices

Previously, when detaching the keyboard on a 2-in-1 device, a notification toast would appear asking if you wanted to switch into tablet mode. If you selected yes, you would switch into tablet mode. If you chose no, it would give you the new tablet posture experience introduced in the May 2020 Update (or simply the desktop on earlier versions of Windows 10). We are further updating this experience by changing the default, so that this notification toast no longer appears and instead will switch you directly into the new tablet experience, with some improvements for touch. You can change this setting by going to Settings > System > Tablet. Some users may have already seen this change on Surface devices.

And to address confusion with some users getting stuck in tablet mode on non-touch devices, we are removing the tablet mode quick action on non-touch devices.

In addition, new logic is incorporated to let users boot into the appropriate mode according to the mode they were last in and whether the keyboard is attached or not.

Other updates for Insiders

Windows Calculator graphing mode feature now rolling out to the public

We are happy to announce that the graphing mode feature we released to Insiders in January is now rolling out to the general public! Adding support for graphing was one of our top feature requests, so we’re excited to bring this feature to our users. Graphing capabilities are also essential for students who are beginning to explore linear algebra. With this feature, we hope to empower students to learn mathematics by improving their conceptual understanding and attitudes towards math.

Windows Calculator showing multiple equations with variables plotted on the graph as the variables update live.

Key features

  • Plot one or more equations on the graph. Enter multiple equations so that you can compare plots against each other and see interactions between the lines.
  • Add equations with variables. If you enter equations with variables (e.g., y = mx + b), you’ll be able to update the value of those variables to see the changes live on the graph.
  • Analyze the graph. Trace plots with your mouse or keyboard and analyze equations to help identify key graph features, like the x- and y-intercepts.

Windows Calculator showing multiple equations in dark theme.

Since we released the feature in preview earlier this year, we’ve made lots of improvements based on your feedback in Feedback Hub and on GitHub, like introducing a brand new dark theme graph and more line customization options, adding error handling for when you try to plot an equation that isn’t quite right, and improving the overall experience when tracing or plotting multiple equations at the same time.

Thank you for your feedback and helping to make this feature better for everyone! You must have the Windows 10 May 2020 update and the latest version of Windows Calculator to access this feature.

Updates for developers

The Windows SDK is now flighting continuously with the Dev Channel. Whenever a new OS is flighted to the Dev Channel, the corresponding SDK will also be flighted. You can always install the latest Insider SDK from SDK flights will be archived in Flight Hub along with OS flights.


  • We fixed an issue resulting in Insiders experiencing bug checks when connecting and interacting with an Xbox controller.
  • We’ve fixed an issue causing some games and applications to crash at launch or fail to install.
  • We fixed an issue resulting in Microsoft Edge not navigating to websites when WDAG was enabled on the last 2 flights.
  • We fixed an issue which was increasing log off time in recent builds.
  • We fixed an issue with the Chinese Pinyin IME where after setting your preferred IME toolbar orientation, you may not be able to change it again after rebooting your PC.
  • We fixed an issue causing Reset this PC to always show the error “There was a problem resetting this PC” when launched from Settings in the last few builds.
  • We fixed an issue resulting in some Bluetooth devices no longer showing their battery level in Settings in the last few builds.
  • We fixed an issue where Settings would crash if you went to Settings > Privacy > Microphone while a win32 app was recording audio.
  • We fixed an issue where if Sound Settings showed “no input devices found” in the input dropdown and you clicked it, then Settings would crash.
  • We fixed an issue where when adding a printer, the dialog might crash if you navigated through to the “Add a printer driver” dialog in recent builds.
  • We fixed a graphics related issue resulting in some users experiencing bugchecks.

Known issues

  • We’re working on a fix for an issue causing some systems to crash with a HYPERVISOR_ERROR bugcheck.
  • We’re looking into reports of the update process hanging for extended periods of time when attempting to install a new build.
  • We’re aware of an issue where Notepad might fail to reopen files which were automatically saved during a PC restart (if that option is enabled in Settings). Documents can be recovered from %localappdata%Notepad.We’re investigating reports of the screen becoming dimmer after upgrading to the previous build.
  • We’re aware of an issue where Task Manager reports 0.00 GHz CPU usage in the Performance tab.
  • We’re investigating reports that when you press space while using the Korean IME in certain apps, the last character is deleted.
  • We’re working to fine tune the tile animations in Start to avoid flashes of color.
  • For Insiders with the new Alt+Tab experience mentioned above, please note that the setting under Settings > System > Multitasking to set Alt+Tab to “Open windows only” currently doesn’t work.

New Windows Insider website design

Today, we launched a redesigned version of the Windows Insider website that’s build with Microsoft’s new, more accessible framework. This was an important chance to align our site with improvements Microsoft is making across the board, create a more beautiful and user-friendly home for the program, and better highlight all the ways you can engage with us.

Right now, the site is only available in the en-us English language while we also stand up new and improved translated versions of the site. Thank you for your patience as we try to make this website work better for Insiders around the world.

If you speak English, please go take a look. We’re also implementing new tools that will help us improve the site based on how you all are using it, so the more you explore the better. If you have any issues, reach out to us @WindowsInsider on Twitter.


As a reminder, some of the features mentioned above for this build are being rolled out to a subset of Insiders in the Dev Channel at first. If you don’t see some of the features right away, please be patient as we’ll be rolling them out to more Insiders in the Dev Channel over time.

You can check out our Windows Insider Program documentation here, including a list of all the new features and updates released in builds so far. Not seeing any of the features in this build? Check your Windows Insider Settings to make sure you’re in the Dev Channel. Submit feedback here to let us know if things weren’t working the way you expected.

If you want a complete look at what build is in which Insider ring, head over to Flight Hub. Please note, there will be a slight delay between when a build is flighted and when Flight Hub is updated.


The post Announcing Windows 10 Insider Preview Build 20161 appeared first on Windows Blog.

Read the whole story
4 hours ago
West Grove, PA
Share this story

NuGet Package Alternatives when Migrating to .NET Core

1 Share

NuGet Package Alternatives

Migrating from .NET Framework to .NET Core requires all of your NuGet Package dependencies to also be compliant with .NET Core. But what happens when you find a dependency that only targets .NET Framework? Here are a few NuGet package alternatives that I’ve run into during my own migration.

Migrating from .NET Framework to .NET Core

This post is in a blog series for migrating from .NET Framework to .NET Core. Here’ are some earlier post if you need to catch up:

Entity Framework

Probably the most common dependency most projects have is on Entity Framework. Luckily there are a few options in terms of support for .NET Core.

First, Entity Framework version 6.3 and higher target .NET Standard 2.1. Which means that you must migrate to .NET Core 3.0 or higher.

This is a bit of a problem if you want to migrate to .NET Core 2.1 as I’ve mentioned in my previous posts. This is more applicable if you’re migrating from ASP.NET on .NET Framework.

There is a second option which is to use Z.EntityFramework.Classic

Entity Framework Classic is an EF6 fork with performance enhancement, new features, and .NET Core support.

The community (free) version supports everything that’s in EF6 but targets .NET Standard 2.0. Which means you can run on .NET Core 2.1.

Machine Key

If you’re using System.Web.MachineKey and cannot for whatever reason move to the new ASP.NET Core Data Protection, you might want to look at AspNetCore.DataProtection.MachineKey

This package adds a new DataProtector that is configured using your existing Decryption & Validation Keys from your web.config. This allows you to Decrypt data that you might have already encrypted using MachineKey on .NET Framework. This package also supports .NET Standard 2.0


If you do any image processing on .NET Framework, you might be using the ImageProcessor library. Although not a direct replacement, the same author, James Jackson-South has created a new library ImageSharp that does work on .NET Core

These libraries are completely different. ImageSharp is not a drop in replacement for ImageProcessor but it’s by far the best image library that can run on .NET Core.


Another issue we ran into was PDF generation. For this I turned to IronPDF. This is a commercial product that requires a license. It does support .NET Standard 2.0 and works on Windows, MacOS, and Linux.

If you’re using PdfSharp, there is a  replacement package, PdfSharpCore.PdfSharp that targets .NET Standard.

NuGet Package Alternatives

Have you run into packages that don’t support .NET Core or .NET Standard?

If you have and/or have found any NuGet package alternatives, let me know in the comments or on Twitter. I’d like to keep this an evolving post with other recommendations.

Enjoy this post? Subscribe!

Subscribe to our weekly Newsletter and stay tuned.

The post NuGet Package Alternatives when Migrating to .NET Core appeared first on CodeOpinion.

Read the whole story
4 hours ago
West Grove, PA
Share this story
Next Page of Stories