Comments (5)
The exception only occurs in the .NET 4.5 build because the code that sets the default value for optional parameters is conditionally compiled out in prior framework builds because the SetConstant
method wouldn't have been available:
This looks like a bug in the .NET Framework 4.5 because the TypeBuilder
doesn't handle decimal
, and I'm not even sure which CorElementType
would be reported for decimals:
- http://referencesource.microsoft.com/#mscorlib/system/reflection/emit/typebuilder.cs,485
- https://msdn.microsoft.com/en-us/library/ms232600(v=vs.110).aspx
Looks like GetCorElementType
will return CorElementType.ValueType
for System.Decimal
:
from core.
I agree that it is pretty weird that a decimal may not be passed to the SetConstant
method, but I am not sure that it is a bug. At least it is documented on MSDN:
defaultValue is restricted to the following types: Boolean, SByte, Int16, Int32, Int64, Byte, UInt16, UInt32, UInt64, Single, Double, DateTime, Char, String, and Enum.
I am not sure about the consequences as I am not familiar with the TypeBuilder
, but would it be possible to simply omit the SetConstant
call for all decimals?
from core.
Ah yer, that method would have been there since early .NET days because the CLR has always supported optional parameters for COM interop.
I suspect that the documentation was written from the code. If you look at the doco for .NET Framework 2.0 it actually explicitly calls out Decimal should be null, however I think that has been fixed in later revisions of the documentation because passing null would actually throw an exception.
defaultValue is restricted to the following types: Boolean, SByte, Int16, Int32, Int64, Byte, UInt16, UInt32, UInt64, Single, Double, DateTime, Char, String, and Enum. If the type of the parameter is Decimal or Object, defaultValue can only be null.
I see no reason why DP shouldn't just omit calls to SetConstant
for decimals with a big glaring comment referring to the fact that the framework code can't handle them so it'll have to do. We work around a big pile of defects right through DP's code, so another one is no problem.
from core.
Sorry for responding this late, but I have now commited a fix for this issue and issued a pull request. Right now the issue does not affect us (as we are stuck with .NET 4.0) but it would be great if the fix could be added to a future release :)
Thank you for your help!
from core.
Fixed by #91. Thanks.
from core.
Related Issues (20)
- Not Intercepted Method is invoked on target, not on proxy. HOT 5
- Random VerificationException/TypeLoadException HOT 5
- it's very slow to create proxy HOT 2
- Log4Net not listed in dependencies HOT 4
- `InvalidProgramException` when proxying `MemoryStream` with .NET 7 HOT 15
- Proxy created with CreateClassProxyWithTarget returns false for Equals on itself HOT 3
- Why TransactionInterceptor.Intercept run at the client HOT 2
- System.InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. HOT 1
- `ArgumentException`: "Could not find method overriding method" with overridden class method having generic by-ref parameter HOT 3
- `ArgumentException`: "Cannot create an instance of `TEnum` because `Type.ContainsGenericParameters` is true" caused by `Enum` constraint on method `out` parameter HOT 4
- Proxy fail to create for create substitute that returns a derived class from abstract that satisfies interface implicitly HOT 5
- Release 5.2.0 HOT 1
- Support by-ref-like (`ref struct`) parameter types such as `Span<T>` and `ReadOnlySpan<T>` HOT 10
- Support "with" for record proxies HOT 4
- CreateInterfaceProxyWithoutTarget and BaseTypeForInterfaceProxy-member
- DictionaryAdapter Nesting Dictionaries JSON like
- Allow to intercept IAsyncEnumerable HOT 1
- ProxyGenerator leaking HOT 2
- MissingMethodException when trying to call a proxy target from different project
- .NET 9 compatibility: Signature of the body and declaration in a method implementation do not match HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from core.