Hi,
I have created a couple of scripts where I use a Python node to display a Windows Form for a better user experience.
This has worked fine for Revit 2023 and earlier. However, when trying to run these scripts in Revit 2024, I get an error message saying:
“System.Reflection.Emit.TypeBuilder not found .” See the attached picture.
Through a lot of testing, I found out that it is different events like .Click etc., that cause the error.
I have made a simple example with a form and a clickable label. See the code below.
If I remove the line:
self.label.Click += self.label_clicked,
the form is displayed as expected.
I tried to change .Click to other events but got the same error.
I also tried to change from a Windows Form to a WPF Form but got the same error for events then as well.
I guess this has something to do with the upgrade from .NET 4.8 in previous Dynamo versions to 6.0 in Dynamo for Revit 2024, but I am not skilled enough to figure out what the problem is and how to solve it.
Is there anyone here who knows how to solve this?
Code example:
import clr
clr.AddReference('System.Windows.Forms')
clr.AddReference('System.Drawing')
from System.Windows.Forms import Form, Label
from System.Drawing import Point
class SimpleForm(Form):
def __init__(self):
self.label = Label()
self.label.Text = "Label is not clicked"
self.label.Location = Point(50, 50)
self.label.Click += self.label_clicked # Click Event that cause error
self.Controls.Add(self.label)
def label_clicked(self, sender, args):
self.label.Text = "Label is clicked"
form = SimpleForm()
form.Show()
1 Like
Hi,
for info, the issue has been reported
opened 06:37PM - 14 Nov 23 UTC
tracked
### Dynamo Version
Dynamo Core 2.19.3.6394
Dynamo for Revit 2.19.3.10292
(Rev… it 2024.2)
### Host
_No response_
### Operating System
Windows 11
### What did you do?
Trying to create an event inside a Python node:
```python
from System import EventHandler, EventArgs
def my_handler(obj, e):
pass
handler = EventHandler[EventArgs](my_handler)
```
### What did you expect to see?
No errors, this worked in Dynamo 2.16 in Revit 2023.1 but not in the 2.19 build shipped with Revit 2024.2.
### What did you see instead?
The following error:
PythonEvaluator.Evaluate operation failed. Constructor on type 'System.Reflection.Emit.TypeBuilder' not found.
### What packages or external references (if any) were used?
_No response_
### Stack Trace
_No response_
### Details
The same error occurs when trying to add the handler to events with the += operation.
opened 12:47PM - 15 Nov 23 UTC
### Dynamo Version
Dynamo 2.19.3
### Revit Version
Revit 2024.2
### … Operating System
Windows 11
### What did you do?
try to use events subscription with CPython3
### What did you expect to see?
No Error
### What did you see instead?
a Python error
```
Node Name: PythonScript
Package: Core.Scripting
Dynamo Version: 2.19.3.6394
Host: Dynamo Revit
Messages: PythonEvaluator.Evaluate operation failed.
The constructor on type 'System.Reflection.Emit.TypeBuilder' was not found.
Status: Warning
```

Example 1
```
import clr
import System
from System import EventHandler
clr.AddReference("System.Drawing")
clr.AddReference("System.Windows.Forms")
import System.Drawing
import System.Windows.Forms
from System.Drawing import *
from System.Windows.Forms import *
class Form26(Form):
def __init__(self):
self.InitializeComponent()
def InitializeComponent(self):
self._button1 = System.Windows.Forms.Button()
self.SuspendLayout()
#
self._button1.Location = System.Drawing.Point(73, 103)
self._button1.Name = "button1"
self._button1.Size = System.Drawing.Size(142, 43)
self._button1.TabIndex = 0
self._button1.Text = "button1"
self._button1.UseVisualStyleBackColor = True
self._button1.Click += self.Button1Click
#
self.ClientSize = System.Drawing.Size(284, 261)
self.Controls.Add(self._button1)
self.Name = "Form26"
self.Text = "Form26"
self.ResumeLayout(False)
def Button1Click(self, sender, e):
pass
objForm = Form26()
objForm.ShowDialog()
```
Example 2
```
import clr
import System
from System import EventHandler
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
# Import RevitAPI
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
clr.AddReference("RevitAPIUI")
from Autodesk.Revit.UI import *
from Autodesk.Revit.UI.Events import *
doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
uiapp = uidoc.Application
def dismiss (sender, eventArgs):
if isinstance(eventArgs, TaskDialogShowingEventArgs):
eventArgs.OverrideResult(TaskDialogResult.No)
return
dialogEventHandler = EventHandler[DialogBoxShowingEventArgs](dismiss)
uiapp.DialogBoxShowing += dialogEventHandler
```
### Stacktrace/logs
_No response_
### Details
the error seems related to the build/compilation of PythonNet 2.5.2 (Python.Runtime) with Net.Standard 2.0 as target
there are potentially others PythonNet 2.5.2 issues due to this change (Net Framework -> Net.Standard 2.0),
_will probably be resolved in PythonNet 3.x.x_
2 Likes
Thank you @c.poupin for pointing that out !
Then i have to wait for the bugg to be solved.
Hi, do we have an update on this bug? My dyn script work in Revit 2023 but fails in 2024.
Thank you
@egdivad
the Dynamo team is starting to work on the integration of PythonNet 3 (which should solve several problems, including this one)
I can suggest you to use C# or IronPython3 in the meantime
2 Likes
NIRMAL
August 21, 2024, 6:51am
6
Hi @c.poupin
Is that issue fixed?
I tried searching for it on github but didn’t find a proper answer while everywhere it was mentioned that it would be fixed by June and July.
Evenet Handlers are working for me in Revit 2024.1 but not in 2024.2
Hi @NIRMAL
To Date, It’s fixed only in Revit 2025.2, you can use IronPython instead
1 Like