Azure App Service Team Blog

How the App Service team functions

Develop Azure Functions on any platform

I’m excited to announce that we have ported Azure Functions to .NET Core 2.0! Both the runtime and the Azure Functions Core Tools are now cross-platform. Now, you can debug C# and JavaScript functions on a Mac or Linux using the Core Tools and Visual Studio Code. Both the runtime and the Core Tools are still in preview and we welcome your feedback!

As this is a preview release, there are still a number of feature gaps. For more information, see Azure Functions runtime 2.0 known issues.

Running on your local machine

To get the new version of the core tools, pull down the @core tag on npm:

npm i -g azure-functions-core-tools@core

If you’re using Ubuntu, prefix the command above with “sudo.”

If you have problems with the npm install on Mac, use the following:

sudo npm i -g azure-functions-core-tools@core --unsafe-perm

To learn how to use the tools, see Code and test Azure functions locally.

JavaScript (Node 8.5 or higher)

For the easiest installation, you must be running Node version 8.5 or higher. See instructions below for how to target a lower version.

To create a new JavaScript HTTP-triggered function, do the following:

mkdir JavaScriptHttp
cd JavaScriptHttp
func init .
func new --language JavaScript --template HttpTrigger --name HttpTriggerJavaScript

Run the host. This automatically enables debugging with the Node port 5858:

func host start

Open the folder in Visual Studio Code: code .

In VSCode, set a breakpoint at the first line of the function, and attach the debugger (via F5 or the debug toolbar). Then, in a browser, navigate to the URL http://localhost:7071/api/HttpTriggerJavaScript?name=Functions%20Everywhere!

You’ll then see the breakpoint being hit in VSCode!


JavaScript (Node versions prior to 8)

After installing azure-functions-core-tools, run the following commands:

npm i -g node-pre-gyp
cd %userprofile%/.azurefunctions/bin/workers/node/grpc
node-pre-gyp install

Once these tools are installed, you can use the instructions in the previous section to run and debug JavaScript functions.

C# .NET Standard 2.0 class library

You can now run and debug C# functions on a Mac or Linux. However, the package Microsoft.NET.Sdk.Functions does not yet support .NET Standard 2.0 class libraries. This is the package that identifies a project as Functions project to Visual Studio and generates function.json from attributes during build.

You can still author C# class libraries that target .NET Standard 2.0, but you must use a manually-authored function.json. The templates for C# class libraries aren’t yet available in the Core Tools, but you can get a sample from GitHub.

Dotnet command line

git clone https://github.com/lindydonna/CSharpHttpCore.git
cd CSharpHttpCore
dotnet build
dotnet publish
cd HttpTriggerCore/bin/Debug/netstandard2.0
func host start 

VS Code debugging

To debug your C# functions, open the folder containing your .csproj in VS Code. Make sure you have installed the C# extension.

  • In the debug toolbar next to the play button, select Add Configuration
  • Select .NET Core as the environment, then .NET: Attach to local .NET Core Console App.

This will generate a launch.json configuration for your project. Then, press F5 and select .NET Core Attach. Select the dotnet process with the command line Azure.Functions.Cli.dll host start.

Browse to the URL http://localhost:7071/api/HttpTriggerCSharp?name=CSharpEverywhere!. You’ll then see your breakpoint hit in VSCode.

Visual Studio

First, ensure you have downloaded the @core version of azure-functions-core-tools: npm i -g azure-functions-core-tools@core

Then, add a new launch configuration for the 2.0 version of the Core Tools:

  • In project properties -> Debug, change Launch to Executable
  • For Executable, use %APPDATA%\npm\func.cmd
  • For Application Arguments, use host start
  • For working directory, use $(TargetDir)

F5 will now launch the new version of the Azure Functions Core Tools.

Running Functions 2.0 in Azure

You can also use the .NET Core 2.0 port in Azure by targeting the new Functions 2.0 preview runtime. To use it, select “beta” in Function app settings -> Runtime version. Alternatively, you can the app setting FUNCTIONS_EXTENSION_VERSION to the value beta. You will then see a different set of templates available in the Add New Function page.

Since the 2.0 runtime is in preview, there may be breaking changes even in minor releases. So, the 2.0 runtime should not be used for production workloads.

If you navigate to the root of you function app, you’ll see that you’re running the new version:

Connect with us

We’ve seen a lot of excitement and interest, so we’re looking forward to getting your feedback as we finalize the Functions 2.0 runtime.

  • To report bugs or file feature requests, please open an issue on the Azure-Functions GitHub repo.
  • For technical questions, please post on the MSDN forums or StackOverflow. The entire Functions engineering team monitors these questions, so you’re sure to get an expert answer.
  • For product news, follow @AzureFunctions.