繁体   English   中英

跨 dll 边界访问匿名/动态类型的属性会导致 RuntimeBinderException

[英]Accessing properties of anonymous/dynamic types across dll boundaries gives RuntimeBinderException

在下面的示例中, x.propertyX工作正常,而y.propertyX给了我一个Microsoft.CSharp.RuntimeBinder.RuntimeBinderException ,抱怨“object”中没有定义“propertyX”。

Program 类中的 CreateDynamic 方法(如下所示)和 Class1 中的 CreateDynamic 方法(未显示)完全相同,但 Class1 与 Program 在不同的项目中。 如果我将 Class1 移到 Program 的项目中,则一切正常。

class Program
{
    public static object CreateDynamic()
    {
        return new { propertyX = "asdf" };
    }

    static void Main(string[] args)
    {
        dynamic x = CreateDynamic();
        Console.WriteLine(x.propertyX);

        dynamic y = Class1.CreateDynamic();
        Console.WriteLine(y.propertyX);

我需要做什么才能使匿名类型作为动态类型跨 dll 工作 - 或者这是不可能的?

更新: Fwiw,我发现我可以使用 ExpandoObjects 解决这个问题,然后我将其“转换”为动态,但与

new { key1 = val1, key2 = val2 }

匿名类型提供的样式。

匿名类型是创建它们的程序集内部的。如果您可以控制源代码,您可以将它们设为Friend 程序集

[assembly:InternalsVisibleTo("TheOtherAssembly")]

但也有缺点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM