Desarrollar add-ins de Revit y migrarlos a Revit 2027

3D-Gebäudemodell mit offenem Dachstuhl und Bauteilschichten auf Bauplänen

CAD/BIM

Revit 2027 está instalado, pero su add-in no aparece en la cinta de opciones, o Revit avisa al arrancar de que no se puede cargar. La causa es casi siempre la misma: Revit 2027 funciona con .NET 10 y su add-in se compiló para .NET 8 o para .NET Framework.

Cómo está estructurado un add-in de Revit

Un add-in de Revit es una DLL de .NET con al menos una clase que implementa IExternalCommand (un comando) o IExternalApplication (inicio y cierre, por ejemplo para la cinta de opciones). Qué DLL y qué clase debe cargar Revit se indica en un pequeño archivo XML con la extensión .addin, el manifiesto. Cada cambio en el modelo necesita una transacción de Revit:

using Autodesk.Revit.Attributes;

using Autodesk.Revit.DB;

using Autodesk.Revit.UI;



[Transaction(TransactionMode.Manual)]

public class KommentarSetzen : IExternalCommand

{

    public Result Execute(ExternalCommandData commandData, ref string message,

        ElementSet elements)

    {

        var uidoc = commandData.Application.ActiveUIDocument;

        var doc = uidoc.Document;

        // Cada cambio en el modelo necesita una transacción de Revit

        using (var t = new Transaction(doc, "Kommentar setzen"))

        {

            t.Start();

            foreach (var id in uidoc.Selection.GetElementIds())

            {

                var parameter = doc.GetElement(id)

                    .get_Parameter(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS);

                if (parameter != null && !parameter.IsReadOnly)

                {

                    parameter.Set("geprüft");

                }

            }

            t.Commit();

        }

        return Result.Succeeded;

    }

}

El comando escribe el comentario en todos los elementos seleccionados. Con el atributo TransactionMode.Manual, el add-in gestiona sus transacciones por sí mismo. Si falta el Commit, Revit deshace los cambios al salir del bloque using.

Qué cambia con Revit 2027

Revit 2024 y versiones anteriores funcionan con .NET Framework 4.8, Revit 2025 y 2026 con .NET 8. Revit 2027 funciona con .NET 10 y, según Autodesk, todos los add-ins deben compilarse con el SDK de .NET 10. Microsoft pone fin al soporte de .NET 8 el 10 de noviembre de 2026. Por eso, Autodesk ha anunciado que también pasará Revit 2025 y 2026 a .NET 10 y ha pedido a los desarrolladores que prueben sus add-ins con ello.

Según el blog para desarrolladores de Autodesk sobre el SDK de Revit 2027, se añaden otros cambios:

  • Nuevas ubicaciones: Revit ya no busca los add-ins para todos los usuarios en C:\ProgramData\Autodesk\Revit\Addins\2027, sino en C:\Program Files\Autodesk\Revit\Addins\2027. La carpeta por usuario sigue funcionando. También Application.AllUsersAddinsLocation devuelve otro valor.
  • Aislamiento: desde Revit 2026, un add-in puede recibir un contexto de carga propio en el manifiesto, en ManifestSettings, con UseRevitContext y ContextName. Revit 2027 añade PublicAssemblies, Dependencies y UseAllContextsForDependencyResolution, para que los add-ins puedan hacer referencia unos a otros de forma explícita.
  • API modificada: ModelPathUtils.GetAllCloudRegions() sustituye a CloudRegionUS y CloudRegionEMEA. Como obsoletos o eliminados, Autodesk menciona, entre otros, la importación AXM, partes de Mechanical.Zone, métodos antiguos para crear armaduras y algunas propiedades de EnergyDataSettings.

Migrar en cuatro pasos

Paso 1: el archivo de proyecto. Cree un archivo de proyecto nuevo en formato SDK. Si Revit 2024 y 2027 deben atenderse desde un mismo código fuente, el SDK compila ambas versiones una tras otra:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>

    <!-- Un código fuente, dos compilaciones: Revit 2024 y Revit 2027 -->

    <TargetFrameworks>net48;net10.0-windows</TargetFrameworks>

    <Platforms>x64</Platforms>

    <PlatformTarget>x64</PlatformTarget>

    <UseWPF>true</UseWPF>

    <UseWindowsForms>true</UseWindowsForms>

    <LangVersion>latest</LangVersion>

  </PropertyGroup>

  <PropertyGroup Condition="'$(TargetFramework)' == 'net48'">

    <RevitPfad>C:\Program Files\Autodesk\Revit 2024\</RevitPfad>

  </PropertyGroup>

  <PropertyGroup Condition="'$(TargetFramework)' == 'net10.0-windows'">

    <RevitPfad>C:\Program Files\Autodesk\Revit 2027\</RevitPfad>

  </PropertyGroup>

  <ItemGroup>

    <Reference Include="RevitAPI">

      <HintPath>$(RevitPfad)RevitAPI.dll</HintPath>

      <Private>false</Private>

    </Reference>

    <Reference Include="RevitAPIUI">

      <HintPath>$(RevitPfad)RevitAPIUI.dll</HintPath>

      <Private>false</Private>

    </Reference>

  </ItemGroup>

</Project>

Para Revit 2025 y 2026 se añade, si es necesario, otro destino. Autodesk recomienda además un global.json que fije el SDK de .NET 10, y Visual Studio 2026 como entorno de desarrollo.

Paso 2: compilar y resolver los avisos. La advertencia CA1416 la elimina la línea [assembly: SupportedOSPlatform("windows")], que la propia Autodesk propone para los ejemplos del SDK. Después vienen los puntos en los que usted utiliza partes de la API eliminadas o modificadas.

Paso 3: las trampas de .NET 10. Lo que vale para AutoCAD vale también aquí: BinaryFormatter siempre lanza una excepción, la página de códigos 1252 necesita registrar CodePagesEncodingProvider y Process.Start solo abre archivos con UseShellExecute = true. Esto afecta precisamente a los add-ins que leen archivos de Excel o CSV.

Paso 4: entregar y probar. Adapte su instalador a las nuevas ubicaciones y pruebe su add-in en Revit 2027 junto con los demás add-ins de sus usuarios. Precisamente con bibliotecas compartidas, solo allí se ve si el aislamiento funciona como se esperaba.

Errores típicos

  • El add-in se compila para .NET 8 y se coloca en Revit 2027. No se carga.
  • El instalador sigue escribiendo el manifiesto en ProgramData. Revit 2027 ya no busca allí.
  • Faltan UseWPF y UseWindowsForms en el archivo de proyecto, aunque la interfaz necesita ambos.
  • Las DLL de Revit se copian en la carpeta de salida con Private en true.
  • Pulsar Esc al seleccionar provoca Autodesk.Revit.Exceptions.OperationCanceledException. Quien captura la excepción homónima de System notifica una cancelación como error.
  • Dos add-ins traen la misma biblioteca en versiones diferentes, y nadie lo ha probado.

Cómo le ayudamos

  • Formación: nuestra formación «Revit .NET API con C#» trabaja con Revit 2027 y .NET 10.
  • Revisión de add-ins Revit 2027: revisamos su add-in en cuanto a .NET 10, las nuevas ubicaciones y el aislamiento, y le decimos qué hay que hacer.
  • Proyecto: desarrollamos add-ins de Revit, por ejemplo una exportación de datos de proyectos de laboratorio a XML, JSON y PDF para un proveedor de tecnología de laboratorio, y migramos los existentes. Concierte una primera conversación.
  • El libro: el libro técnico de Ebi F. Eilber «AutoCAD .NET API», cuya publicación está prevista para 2027, describe en detalle las trampas de .NET 10.

Fuentes: Autodesk Developer Blog, «Revit 2027 SDK: .NET 10, API Changes and Additions» (10/04/2026) y «Call for Preview Testing: Revit 2026/2025 Migration to .NET 10» (29/04/2026); Ebi F. Eilber, AutoCAD .NET API (libro técnico, publicación prevista para 2027)

CONTACT

Seleccione su idioma

Primera reuniónconcertarPrimera reuniónconcertar