從版本3.0開始,.NET會在C:\ Program Files \ Reference Assemblies \ Microsoft ....下安裝一堆不同的「參考程序集」,以支持不同的配置文件(如.NET 3.5客戶端配置文件,Silverlight配置文件)。其中每一個都是一個正確的.NET程序集,其中只包含元數據 - 無IL代碼 - 並且每個程序集都標有ReferenceAssemblyAttribute
。元數據僅限於適用配置文件中提供的類型和成員 - 這就是智能感知如何顯示一組受限制的類型和成員。運行時不使用引用程序集。如何創建和使用.NET僅用於元數據的「引用程序集」?
我從this blog post瞭解了一點。
我想爲我的庫創建和使用這樣的引用程序集。
- 如何創建一個只有元數據的程序集 - 是否有一些編譯器標誌或ildasm後處理器?
- 是否有屬性可以控制哪些類型導出到不同'配置文件'?
- 如何在運行時引用程序集解析 - 如果我的應用程序目錄中存在引用程序集而不是「真實」程序集,而不是GAC中,將繼續探測,並且我的AssemblyResolve事件觸發,以便我可以在運行時提供實際裝配?
任何想法或指向哪裏我可以瞭解更多關於這將不勝感激。
更新:環顧一下,我看到.NET 3.0'引用程序集'似乎有一些代碼,並且Reference Assembly attribute僅在.NET 4.0中添加。因此,新的運行時可能會改變一些行爲。
爲什麼?對於我的Excel-DNA(http://exceldna.codeplex.com)加載項庫,我通過將引用的程序集作爲資源打包到.xll文件中來創建單個文件.xll加載項。打包的程序集包括用戶的插件代碼以及Excel-DNA管理的庫(可能由用戶的程序集引用)。
聽起來相當複雜,但大部分時間都工作得非常好 - 外接程序是一個小文件,所以沒有安裝分發問題。由於版本不同,我遇到了(並非意外的)問題 - 如果將舊版本的Excel-DNA託管庫作爲文件運行,運行時將加載該文件而不是打包的文件(我從來沒有機會干涉加載)。
我希望爲我的Excel-DNA管理部分製作一個參考彙編,用戶在編譯其加載項時可以指向它。但是如果他們在運行時錯誤地使用了這個程序集版本,那麼運行時將無法加載它,並且讓我有機會從資源加載真正的程序集。
你爲什麼要這麼做? – svick