The latest Azure Logic Apps (Standard) extension for Visual Studio Code (VS Code) now supports .NET 10 custom code. You can create new .NET 10 local-function projects and migrate your existing .NET 8 projects without turning them into separate Azure Functions apps.
Check your prerequisites
- Install the Azure Logic Apps (Standard) extension for VS Code, version
5.1013.2. - Use Logic Apps Standard extension bundle
1.194.31.
After the extension's dependency setup completes, the .NET 10 software development kit (SDK) and runtime should be installed in its managed dependencies folder. On Windows, the default .NET location is:
%USERPROFILE%\.azurelogicapps\dependencies\DotNetSDK
Check that installation, rather than relying on the dotnet command elsewhere on your PATH. If you've customized the extension's dependency location, check the configured location instead.
New projects target .NET 10
When you create a new custom-code project through the extension, .NET 10 is now the only supported target. The .NET 8 option has been removed for new projects.
Existing .NET 8 projects still need a configuration migration before they target .NET 10. Updating the extension isn't the same as retargeting your project. Unchanged project will continue to run on .NET 8 until the configuration changes below are applied.
If you use the C# code action
If your workflow uses the C# code action, add the runtime setting to your Logic Apps project's settings - either in a local project or on an Azure application. Set LOGIC_APPS_CUSTOMCODE_DOTNETVERSION to net10.0.
Migrate an existing .NET 8 project
You don't need to start with a new workspace. Back up your workspace, including local configuration, before making the changes below. Paths are relative to each project's folder.
Changes in the custom-code project
| File or setting | Change |
|---|---|
Project .csproj: target framework | Set TargetFramework to net10.0. Keep the project as a library. |
Project .csproj: SDK packages | Microsoft.Azure.Workflows.Webjobs.Sdk: 1.4.0Microsoft.Azure.Functions.Worker.Sdk: 2.0.7 |
Project .csproj: supporting packages | Align dependencies as needed. Our migration required:Microsoft.Azure.Functions.Worker: 2.51.0Existing Microsoft.Extensions.Logging: 10.0.0Existing Microsoft.Extensions.Logging.Abstractions: 10.0.0 |
Project .csproj: dependency copying and publication | Set CopyLocalLockFileAssemblies to true. Keep build-triggered publication into the Logic Apps folder. |
.vscode\settings.json | Update the framework segment of azureFunctions.deploySubpath to net10.0. |
Those package versions describe the configuration we tested, not a universal minimum dependency set. Resolve the dependencies your project actually needs rather than copying every package from a sample.
A sample project file will look like this
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <IsPackable>false</IsPackable> <TargetFramework>net10.0</TargetFramework> <AzureFunctionsVersion>v4</AzureFunctionsVersion> <OutputType>Library</OutputType> <PlatformTarget>AnyCPU</PlatformTarget> <LogicAppFolderToPublish>$(MSBuildProjectDirectory)\..\{your logic app target folder}</LogicAppFolderToPublish> <CopyToOutputDirectory>Always</CopyToOutputDirectory> <SelfContained>false</SelfContained> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Abstractions" Version="1.3.0"/> <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="2.51.0"/> <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="2.0.7"/> <PackageReference Include="Microsoft.Azure.Workflows.Webjobs.Sdk" Version="1.4.0"/> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0"/> <PackageReference Include="Microsoft.Extensions.Logging" Version="10.0.0"/> </ItemGroup> <Target Name="TriggerPublishOnBuild" AfterTargets="Build"> <CallTarget Targets="Publish"/> </Target> </Project>Changes in the Logic Apps project
| File or setting | Change |
|---|---|
local.settings.json: custom-code runtime | Set Values.LOGIC_APPS_CUSTOMCODE_DOTNETVERSION to net10.0. |
local.settings.json: host runtime flag | Keep Values.FUNCTIONS_INPROC_NET8_ENABLED set to 1. This is still required. |
.vscode\launch.json: coordinated debugging | Use a launch configuration with:type=logicapp and request=launchfuncRuntime=coreclrcustomCodeRuntime=coreclrisCodeless=true |
Verify the migration
Save all files, restore, and build. Confirm publication under lib\custom\net10.0 in the Logic Apps folder, then run the workflow that calls your edited function and verify its breakpoint.
Use the ready-made migration skill
We've prepared the logicapps-custom-code-net10-migration skill to guide a coding agent through the same process. It inspects your workspace, plans configuration changes before applying them, and guides build and publication verification. It preserves your function and workflow implementations rather than rewriting them.
The skill is available in the custom-code-net10 repository, while we work toward contributing it to Awesome Copilot.
With GitHub CLI (command-line interface) version 2.90.0 or later, inspect the skill and install it for Copilot across projects. These skill commands are currently in preview.
gh skill preview wsilveiranz/custom-code-net10 logicapps-custom-code-net10-migration
gh skill install wsilveiranz/custom-code-net10 logicapps-custom-code-net10-migration --agent github-copilot --scope user
Installation makes the skill available to Copilot; it doesn't run the migration. If you prefer a download, the v0.1.0 release also includes a ZIP of the complete skill folder.
After installation, you can ask your agent:
Migrate this Logic Apps Standard .NET 8 custom-code workspace to .NET 10 using the logicapps-custom-code-net10-migration skill. Preserve my workflows, back up the project first, and include coordinated VS Code debugging.
Keep the host and deployment settings in view
The custom-code target framework isn't the Logic Apps host runtime. Keep the existing host settings, including FUNCTIONS_WORKER_RUNTIME=dotnet. Don't switch the host to dotnet-isolated just because the custom code targets .NET 10.
Preserving your existing code is the migration's starting point, not a guarantee that it will build and run unchanged. Use the build and an executed local function to check the result.
For Azure execution, the deployed Logic Apps application settings must include both LOGIC_APPS_CUSTOMCODE_DOTNETVERSION=net10.0 and FUNCTIONS_INPROC_NET8_ENABLED=1. The .NET 8 host flag is still required even though your custom code targets .NET 10.
When you deploy through the Logic Apps extension in VS Code, these settings are copied to the Azure app. If you deploy through a pipeline, make sure your deployment configuration explicitly includes both application settings. A local settings file alone doesn't configure the Azure app, so verify the deployed runtime configuration after deployment.
The migration skill doesn't change Azure resources as a side effect.
Try the updated extension with one of your custom-code projects. If migration or debugging needs a step we've missed, share the configuration and the symptom in the comments, without credentials or private data. I want to hear where the build or debugging experience still gets in your way.