AutoCAD 2027 and .NET 10: What changes for your add-ins

Railway switches as an image for migrating AutoCAD add-ins to .NET 10

CAD

Your add-in ran without complaint for years – and after the move to AutoCAD 2027 it no longer loads. Or it loads, but your users’ saved settings have suddenly vanished. Both have the same cause: AutoCAD 2027 runs on .NET 10.

What has changed

Moving house is the best opportunity to clear out the cellar. Most of the furniture comes along, some of it does not fit through the new door. It is the same here. AutoCAD 2021 to 2024 run on .NET Framework 4.8, AutoCAD 2025 and 2026 on .NET 8, and AutoCAD 2027 (internally R26.0, DLLs version 26.0) on .NET 10.

AutoCAD.NETVisual Studio
2021 to 2024 .NET Framework 4.8 2019 or 2022
2025 and 2026 .NET 8, .NET 10 from update 2025.1.4 or 2026.1.2 2022, 2026 from these updates
2027 .NET 10 2026

The binary break matters most: an add-in for AutoCAD 2025 or 2026 has to be rebuilt for 2027 – whether it was built with .NET 8 or .NET 10. There is also a fixed date. Microsoft ends support for .NET 8 on 10 November 2026. Autodesk has therefore moved AutoCAD 2025 and 2026 to .NET 10 with the updates above, without changing the API.

The good news: the AutoCAD API itself has changed very little. Most of the work lies in .NET – in the project file, in a few classes that have disappeared and in behaviour that has changed silently.

Step 1: A new project file instead of a conversion

Project files from the .NET Framework era easily run to 150 lines. Converting them is not worth it. Create a new file in SDK format and take over the source files. For AutoCAD 2027 this is all you need:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <!-- AutoCAD 2027 runs on .NET 10, "-windows" adds WPF and WinForms -->
    <TargetFramework>net10.0-windows</TargetFramework>
    <Platforms>x64</Platforms>
    <PlatformTarget>x64</PlatformTarget>
    <UseWPF>true</UseWPF>
    <UseWindowsForms>true</UseWindowsForms>
    <ImplicitUsings>disable</ImplicitUsings>
    <EnableDynamicLoading>true</EnableDynamicLoading>
    <AcadPath>C:\Program Files\Autodesk\AutoCAD 2027\</AcadPath>
  </PropertyGroup>
  <ItemGroup>
    <!-- Private=false: AutoCAD ships these DLLs itself -->
    <Reference Include="accoremgd">
      <HintPath>$(AcadPath)accoremgd.dll</HintPath>
      <Private>false</Private>
    </Reference>
    <Reference Include="acdbmgd">
      <HintPath>$(AcadPath)acdbmgd.dll</HintPath>
      <Private>false</Private>
    </Reference>
    <Reference Include="acmgd">
      <HintPath>$(AcadPath)acmgd.dll</HintPath>
      <Private>false</Private>
    </Reference>
  </ItemGroup>
</Project>

UseWPF and UseWindowsForms are needed because the AutoCAD DLLs reference both; without them the build reports warning MSB3277. ImplicitUsings stays off, otherwise Application and Exception become ambiguous (error CS0104). And Private set to false stops the build from copying the AutoCAD DLLs and all their dependencies into the output folder – in our test that was 37 DLLs and 61.8 MB.

Delete the old Properties\AssemblyInfo.cs or set GenerateAssemblyInfo to false, otherwise you get error CS0579. Binding redirects in an app.config no longer have any effect under .NET 10.

Step 2: What only shows up at runtime

The cases the compiler lets through are less pleasant. We tested them under both runtimes:

  • BinaryFormatter: since .NET 9 every call throws a PlatformNotSupportedException, and AutoCAD 2027 switches it off as well. Use XmlSerializer or System.Text.Json instead. Remember your customers’ existing files – the new version can no longer read them.
  • AppDomain.CreateDomain and Thread.Abort are gone. Use AssemblyLoadContext and CancellationToken instead.
  • Code page 1252 is only available in .NET 10 after registering a provider.
  • Process.Start only opens files and web addresses with UseShellExecute = true.
  • Marshal.GetActiveObject is missing. Inside an add-in, Application.AcadApplication gives you the COM interface.
  • Assembly.LoadFile loads into a separate load context. Use Assembly.LoadFrom.
// Windows-1252 (old parts lists, CSV files): .NET 10 needs the provider first
#if NET
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
#endif
var ansi = Encoding.GetEncoding(1252);

// Open a file or web address: UseShellExecute now defaults to false
Process.Start(new ProcessStartInfo(path) { UseShellExecute = true });

Several AutoCAD versions from one project

As long as your customers work with AutoCAD 2024 and 2027, your add-in needs two builds. With TargetFrameworks (plural) set to net48;net10.0-windows, the SDK builds both one after the other. A conditional PropertyGroup per target sets the path to the AutoCAD DLLs, and a symbol of your own such as ACAD2024 separates the few places in the code that differ. For net48 you also need LangVersion set to latest and, if you use dynamic, a reference to Microsoft.CSharp. Ship the builds in separate folders of a plug-in bundle, which uses SeriesMin and SeriesMax to tell AutoCAD which build belongs to which version.

Typical mistakes

  • The old project file is carried along – resulting in CS0579.
  • UseWPF and UseWindowsForms are missing. At first you only get MSB3277, with your own user interface an error at the latest.
  • One DLL is expected to serve AutoCAD 2026 and 2027. The binary break rules that out.
  • User settings are still stored in BinaryFormatter format and are silently lost.
  • Old CSV or parts list files in Windows-1252 throw a NotSupportedException.
  • The add-in is built with Visual Studio 2022. For AutoCAD 2027, Autodesk names Visual Studio 2026.

How we help

Source: Ebi F. Eilber, AutoCAD .NET API (book, expected 2027)

First meetingarrange nowFirst meetingarrange now