簡體   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