-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PersistedAssemblyBuilder, types throw exceptions even after created #108733
Comments
Tagging subscribers to this area: @dotnet/area-system-reflection-emit |
Yes, we tried to implement as much as we can, but there are still lot of methods that are not implemented, some of them even could not be implemented. But the methods you are requesting are can be implemented. @snakex64 If you like you could also contribute and implement those methods. This should be quite similar to the |
I sure can try. Can you point me towards where to add the tests ? I had a quick look yesterday but I'm not sure. Adding the code is the easy part, I'll try to get a setup working |
Great, thank you!
If you add Here is instructions how to build and run tests Running tests for a single library |
@buyaa-n I added a PR. Really not sure about the GetProperty as it was a bit more complicated to do, hopefully it's at least a good starting point. |
Closed by #109320 |
runtime/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/TypeBuilderImpl.cs Lines 613 to 614 in 2eeb517
can AssemblyQualifiedName use TypeNameBuilder.ToString with qualified name format runtime/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/TypeNameBuilder.cs Line 236 in 3aa1ec5
|
Description
Hi! I have been trying the new
PersistedAssemblyBuilder
in .net 9. I have been using the previousAssemblyBuilder.DefineDynamicAssembly
to create assemblies at runtime but it seems like the new one might be missing some features.I use
ExpressionTree
to create the method's body, and then compile those expression tree directly in the ILGenerator of that method. I had issues in the past where I couldn't get information about properties and methods out of the type until I callTypeBuilder.CreateType()
on it, then everything works fine, such astype.GetProperties()
ortype.GetProperty(name)
It seems now that even if I call
CreateType()
on the type builder, I still can't call most of the usual reflection methods such asGetProperties()
Is there a way around this?
To make it work in the past, I ended up creating internal static classes that contain the actual implementation. That allowed me to have one class that had "empty methods", basically generating the IL code to do something like:
That way I could call
CreateType()
on that type before I actually know what to put inside the method itself, since I sadly can't do that before the type is created.It seems now that my fix might not be enough anymore.
Reproduction Steps
In .NET 9 RC1 Use the
PersistedAssemblyBuilder
to create a class, create the type and callGetProperties()
on created "Type"Expected behavior
I would expect the "Type" object to behave normally and provide all necessary information normally
Actual behavior
A lot of methods are clearly just throwing exceptions and don't have implementations at all. Such as "GetInterfaces()" has an implementation but "GetInterface" doesn't, even though they both ping back on the same backend object.
Regression?
It used to work with the previous
AssemblyBuilder.DefineDynamicAssembly
but since we can't use it anymore to save dynamic assemblies I don't have a choice but to use the newPersistedAssemblyBuilder
Known Workarounds
No response
Configuration
.NET 9 RC1
Other information
No response
The text was updated successfully, but these errors were encountered: