Skip to content
RevitBootcamp2027 edition
Automation5 min readAutomationTeam fluency

Version matrix: Revit, .NET, Dynamo, pyRevit

Which .NET each Revit release targets, what shipped in recent versions, and how to multi-target an add-in across them.

The reference table for anyone writing code against Revit, or deciding which version to learn on.

Revit releases and their .NET target

Revit Released .NET target (TargetFramework) ElementId
2021 Apr 2020 .NET Framework 4.8 — net48 int
2022 Apr 2021 .NET Framework 4.8 — net48 int
2023 Apr 2022 .NET Framework 4.8 — net48 int
2024 Apr 2023 .NET Framework 4.8 — net48 long
2025 Apr 2024 .NET 8net8.0-windows long
2026 Apr 2025 .NET 8 — net8.0-windows long
2027 Apr 2026 .NET 10net10.0-windows long

Two hard breaks in that table:

  • 2024 → 2025 is the .NET Framework → modern .NET jump. Everything needs recompiling, and some APIs and third-party dependencies changed.
  • 2023 → 2024 is the ElementId.IntegerValue (int) → ElementId.Value (long) change. This broke a large number of add-ins and scripts, and it's why pyRevit needed an int64 fix for newer releases.

An add-in built against the wrong .NET target silently fails to load. No error dialog, no message — your ribbon button simply isn't there. Check the Revit journal for the load exception.

Multi-targeting one project

The standard pattern: one .csproj producing a DLL per Revit version, with conditional compilation for the API differences.

MyAddin.csproj
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>net48;net8.0-windows;net10.0-windows</TargetFrameworks>
    <UseWPF>true</UseWPF>
    <LangVersion>latest</LangVersion>
    <Configurations>Debug R23;Debug R24;Debug R25;Debug R26;Debug R27</Configurations>
  </PropertyGroup>
 
  <!-- Pick the Revit API version per configuration, and define a symbol for it -->
  <PropertyGroup Condition="$(Configuration.Contains('R23'))">
    <RevitVersion>2023</RevitVersion>
    <TargetFramework>net48</TargetFramework>
    <DefineConstants>$(DefineConstants);REVIT2023</DefineConstants>
  </PropertyGroup>
  <PropertyGroup Condition="$(Configuration.Contains('R27'))">
    <RevitVersion>2027</RevitVersion>
    <TargetFramework>net10.0-windows</TargetFramework>
    <DefineConstants>$(DefineConstants);REVIT2027</DefineConstants>
  </PropertyGroup>
 
  <ItemGroup>
    <PackageReference Include="Autodesk.Revit.SDK" Version="$(RevitVersion).*"
                      PrivateAssets="all" ExcludeAssets="runtime" />
  </ItemGroup>
</Project>

ExcludeAssets="runtime" / Copy Local = false matters: never ship RevitAPI.dll alongside your add-in. Revit loads its own.

Then guard the API differences:

public static long AsLong(this ElementId id)
{
#if REVIT2023 || REVIT2022 || REVIT2021
    return id.IntegerValue;
#else
    return id.Value;
#endif
}

The same shape handles DisplayUnitTypeUnitTypeId (changed in 2021) and the ForgeTypeId migration.

The community convention for the .addin manifest and DLL layout is one folder per version:

%AppData%\Autodesk\Revit\Addins\2026\MyAddin.addin   → ...\bin\2026\MyAddin.dll
%AppData%\Autodesk\Revit\Addins\2027\MyAddin.addin   → ...\bin\2027\MyAddin.dll

Dynamo

Dynamo ships inside Revit, and its version is tied to the Revit release. The relevant break is the same .NET one:

  • Dynamo 2.x — .NET Framework, Revit 2024 and earlier.
  • Dynamo 3.x — .NET 8+, Revit 2025 and newer.

Consequence for packages: once a package migrates to .NET 8 for Dynamo 3.x, it stops loading in older Dynamo. Many popular packages now publish separate versions. Check the package's stated compatibility against your Revit release before you build a workflow on it.

Revit 2027's move to .NET 10 was reported as bringing faster and more reliable Dynamo execution.

pyRevit

pyRevit tracks Revit releases quickly. As of writing, the current stable line is 6.4.0 (released April 2026), which includes Revit 2027 support including addin-path and ADC v2027 fixes; Revit 2026 support landed in the 5.1.0 line.

Practical notes:

  • Install the release that lists your Revit version. The installer offers per-version options.
  • pyRevit uses net48 for Revit 2024 and earlier and net8.0-windows for 2025–2026, matching the table above; 2027+ requires the .NET 10 target.
  • pyRevit bundles both IronPython and CPython engines and lets you choose per script. IronPython talks to the .NET API frictionlessly; CPython gets you the real package ecosystem (numpy, pandas, requests) at the cost of a bridge for .NET calls.
  • Check the pyRevit release notes rather than assuming — it moves faster than Revit does.

What shipped recently, and whether it matters

Revit 2026 (April 2025)

  • Accelerated Graphics as a tech preview — GPU-driven navigation; accelerated view activation time improved by an average of 27%.
  • Toposolid enhancements for sculpting and grading complex site conditions.
  • Wall creation from a closed room-bounding area, and walls created by selecting existing wall and column segments.
  • Duplicate layers in Edit Assembly for walls, floors, roofs, ceilings.
  • Worksharing optimized for WAN — meaningfully faster syncs for distributed teams.
  • ReCap Mesh plugin for large reality-capture datasets without killing performance.

Revit 2027 (April 2026)

  • Accelerated Graphics out of tech preview — now production-supported, and compatible with graphic overrides, transparency, halftone, and linked models. This is the concrete win of the release; reported walkthrough playback improvements are large.
  • AI Assistant (tech preview) — an in-Revit chat panel that can answer product questions, query the model, and automate tasks via prompts. Includes an MCP client; Autodesk has stated intent to support local and cloud MCP servers, but the Revit MCP server is announced rather than shipped.
  • Rule-based numbering tool.
  • Tag leader control points — start/end grips on all tag leaders, with snapping to elements.
  • Extended Properties for connected data; AEC Data Model updates remain tech preview.
  • .NET 10, with reported Dynamo execution improvements.
  • Forma Industry Cloud workflows, Issues integration, IFC export improvements, and embodied carbon tracking.

What this means for learning

Nothing in the last three releases changes the fundamentals. Categories, families, parameters, views, schedules, and worksharing have been stable for a decade. If your firm is on Revit 2022, everything in this bootcamp applies except Toposolid (use Toposurface + Building Pad) and the accelerated graphics settings.

For automation, the version does matter, and it's the .NET row of the table above that matters most.

Choosing a version to learn on

  1. Match your team. File format compatibility is one-way and absolute; a 2027 file will never open in 2026.
  2. Otherwise, newest you're licensed for. Accelerated graphics alone makes recent releases noticeably nicer to work in.
  3. Check your add-ins first if you depend on any. pyRevit and the big Dynamo packages are usually current within weeks; in-house tools often aren't.
  4. Avoid upgrading a project mid-stream. Upgrading is one-way, and it must happen for the whole team and every linked model at once.

Sources

Version and feature details above are drawn from Autodesk's release documentation and release announcements, the pyRevit release notes, and the DynamoRevit changelog. Where a feature is a tech preview, that's stated — Autodesk's previews sometimes change substantially before they ship.