从不同库中的方法的“动态”结果读取属性时出现 RuntimeBinderException

Lib*_* TK 2 .net c# dynamic

我有一个静态方法,其中MyLibrary1返回一个动态对象。

public static dynamic GetObjects()
{
return new { test = "something" };
}
Run Code Online (Sandbox Code Playgroud)

但是当我从 访问上述方法时MyLibrary2,调试器显示正确返回的值和对象。

dynamic b = MyLibrary1.GetObjects();
string name = b.test;
Run Code Online (Sandbox Code Playgroud)

我收到一条RuntimeBinderException写着“'object' does not contain a definition for 'test'当我阅读时b.test

当我将方法移至调用库时,相同的代码按预期工作。

max*_*max 5

匿名类型不是公共的,dynamic并不意味着您可以侵入内部/私有的东西并使用它。但反思确实如此。

您可以允许其他程序集使用属性使用内部类型:

// specified in assembly, defining MyLibrary1 class
[assembly: InternalsVisibleTo("Assembly, where you call MyLibrary1.GetObjects()")]
Run Code Online (Sandbox Code Playgroud)

这完全解决了通过动态使用匿名类型的问题。

请注意,这意味着所有内部类型都可以通过指定的程序集访问。