In my code I have a method like this:
GlobalFooBar m_GlobalFooBarObj = /* ... */;
private static void Baz(FooBarBase foo)
{
PropertyInfo[] properties = typeof(GlobalFooBar).GetProperties
(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
/* ... */
foreach (PropertyInfo property in properties)
if (property.CanWrite) // We only want writable properties copied over
property.SetValue(foo, property.GetValue(m_GlobalFooBarObj, null), null);
/* ... */
}
I call this method as follows:
/* ... */
dynamic specificFoo = mumbler.MakeSpecificFooBar();
/* ... */
Baz(specificFoo); // Crash here
/* ... */
After obfuscating my program with SmartAssembly, I get a RuntimeBinderException stating that the .NET runtime cannot find the "Baz" method in my assembly. Of course it can't, because SmartAssembly renamed it. Excluding the method is not an option for me because it would disclose too much about the inner workings of my program.
My workaround goes like this:
/* ... */
FooBarBase tmp = specificFoo; // SmartAssembly broke stuff! Boo!
Baz(tmp);
/* ... */
This works, but we didn't buy SmartAssembly to work around its bugs.

Are problems with the 'dynamic' keyword and SmartAssembly known? If so, is a fix planned?
I'm not too keen on keeping this workaround in the codebase.
(Edit: anonymized the code a bit more and fixed a typo)
I call this method as follows:
After obfuscating my program with SmartAssembly, I get a RuntimeBinderException stating that the .NET runtime cannot find the "Baz" method in my assembly. Of course it can't, because SmartAssembly renamed it. Excluding the method is not an option for me because it would disclose too much about the inner workings of my program.
My workaround goes like this:
This works, but we didn't buy SmartAssembly to work around its bugs.
Are problems with the 'dynamic' keyword and SmartAssembly known? If so, is a fix planned?
I'm not too keen on keeping this workaround in the codebase.
(Edit: anonymized the code a bit more and fixed a typo)