Wat heb je minimaal nodig voor een Revit plug-in?

Is het moeilijk om over te stappen van pyRevit naar C#? Ik leer mijzelf de laatste tijd pyRevit en ik maak gebruik van de cursussen van Erik Frits. Maar uiteindelijk wil ik wel switchen naar C#. Geen beperkingen van IronPython. En volgens mij is de stap niet zo heel groot als je eenmaal de concepten snapt van het programmeren in het algemeen. Ik legde de vraag voor aan Claude en ik kreeg dit antwoord terug, niet gek toch?

Minimaal C# Revit add-in

Wat je nodig hebt

  • Visual Studio Community (gratis) met workload “.NET desktop development”

  • Revit SDK (zit in de Revit installatiemap, of via Autodesk)

  • Twee dll’s als referentie:

    • RevitAPI.dll

    • RevitAPIUI.dll

    • Locatie: C:\Program Files\Autodesk\Revit 2025\


Stap 1: Project aanmaken

In Visual Studio: File > New Project > Class Library (.NET Framework)

Kies .NET Framework 4.8 (niet .NET 6/7/8, Revit gebruikt nog het oude framework).


Stap 2: Referenties toevoegen

In Solution Explorer: rechtermuisknop op References > Add Reference > Browse

Voeg toe:

  • RevitAPI.dll

  • RevitAPIUI.dll

Zet daarna bij beide referenties Copy Local = False. Anders kopieert VS de dll’s mee, wat problemen geeft.


Stap 3: De minimale command

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;

namespace MijnEersteAddin
{
    [Transaction(TransactionMode.Manual)]
    public class MijnCommand : IExternalCommand
    {
        public Result Execute(
            ExternalCommandData commandData,
            ref string message,
            ElementSet elements)
        {
            TaskDialog.Show("Hallo", "Dit werkt!");
            return Result.Succeeded;
        }
    }
}

Toelichting

  • [Transaction(TransactionMode.Manual)] is een attribute, vergelijkbaar met een decorator in Python. Revit vereist dit op elke command.

  • IExternalCommand is een interface. Je belooft aan Revit dat jouw class een Execute methode heeft met exact die signatuur.

  • ExternalCommandData geeft toegang tot Application, UIApplication, en het actieve document via commandData.Application.ActiveUIDocument.Document.


Stap 4: Het .addin manifest

Dit is een XML-bestand dat Revit vertelt dat jouw dll bestaat. Locatie:

C:\ProgramData\Autodesk\Revit\Addins\2025\

<?xml version="1.0" encoding="utf-8"?>
<RevitAddIns>
  <AddIn Type="Command">
    <Name>Mijn eerste add-in</Name>
    <Assembly>C:\pad\naar\jouw\MijnEersteAddin.dll</Assembly>
    <FullClassName>MijnEersteAddin.MijnCommand</FullClassName>
    <ClientId>VERVANG-DIT-DOOR-EEN-GUID</ClientId>
    <VendorId>MMBIM</VendorId>
    <VendorDescription>Mark Maas BIM advies</VendorDescription>
  </AddIn>
</RevitAddIns>

Voor de ClientId heb je een unieke GUID nodig. In Visual Studio: Tools > Create GUID.


Stap 5: Builden en testen

  1. Build de solution (Ctrl+Shift+B)

  2. Start Revit

  3. Je command verschijnt onder Add-ins > External Tools


Vergelijking met pyRevit

pyRevit C# add-in
Bestandstype .py script gecompileerde .dll
Compile-stap nee ja
Manifest nodig nee ja (.addin XML)
Feedback tijdens ontwikkeling direct na elke build
Toegang tot Revit API volledig volledig

In pyRevit werkt een script meteen na opslaan. Bij C# heb je een compile-stap en een manifest nodig. Dat voelt omslachtiger, maar geeft je betere performance, type-safety en een makkelijker te structureren codebase bij grotere projecten.


Handige volgende stap

RevitTemplates van Nice3point: een Visual Studio project template die het basiswerk voor je doet en meteen een nettere projectstructuur opzet.

Referenties