C# dynamic類型報錯:“object”不包含“xxx”的定義


一、起因:

最近在做的一個項目,因為很多地方要用到同一套流程。為了后期維護,要求將共用流程進行抽離,創建為一個公用的類庫。在抽離之前程序運行是沒有問題的,然而在抽離之后就得到了如題錯誤: object不包含xxx的定義。 遇到這個錯誤時也是相當的郁悶,根本就覺得莫名奇妙,完全相同的代碼,只是拿出來以類庫的形式調用而已。

 

二、查找:

遇到問題總得想法子解決,接下來就是進行調試,調試下來就更是摸不着頭腦。來看下面的兩張截圖。看到圖一的錯誤,立即對products進行了監視,看到的結果卻是圖二這樣的(哎呀,這不明明有IsOk屬性嗎?什么鬼...)。由於完全沒有思路,無從下手,於是開始了面向百度編程,找到了這個bug的原因。

                             (圖一)

 

 

                             (圖二)

 

三、解決:

原來是匿名類型在編譯后,訪問修飾符是internal級別的,當跨程序集訪問時就會出現如題錯誤(apiTL.ProductList()返回的是一個匿名類型)。這也就是為什么在抽離前程序運行是正常的(因為在同一程序集中),而抽離后報錯的原因。知道了原因,就來解決它。

 

示例:

程序集A(匿名對象所在的程序集);程序集B(調用程序集A的方法,接收匿名對象)。那么只需要在 程序集A 的AssemblyInfo.cs中加上如下語句,意思是對指定的程序集可見(既:對程序集B可見)

[assembly: InternalsVisibleTo("程序集B")]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM