我需要添加和/或修改配置文件以允許更多的類和成員在PCL中共享(其中很多都是內置於框架中的,例如Thread.Sleep)。什麼是最好的方法來做到這一點?有什麼工具可以幫助嗎?
PS:我不是尋求anwser告訴我NO或停止。我想擁有可以在不同環境中共享的編譯一次的DLL。沒有平臺二進制文件,沒有重新編譯,沒有ifdef。
下面是我走到這一步:
自定義.NET可移植類庫配置文件?
要求:
- 目標environements:5的Silverlight和.NET Framework 4.5。
- 目的PCLS的:由RIA客戶端與ASP.NET服務器(不WCF)的共享基礎架構
- 缺少默認配置文件什麼:XPath的,螺紋的方法,DynamicMethod的/的ILGenerator
PCL概況:下參考大會\微軟\ Framework.NETPortable:
- 所有組件是存根,以 「重定目標」 屬性設置。
- 所有組件具有標誌= 0x171:0×001被簽名,爲0x100是可重定向,並且量0x070在AssemblyNameFlags未定義(似乎沒有效果)
- 組件之間的所有參考文獻都以「重定目標」屬性爲好。
- 所有支持Silverlight的程序集版本均爲2.0.5.0。
- 內置PCL二進制文件包含每個稱爲組件的兩個引用(例如:mscorlib程序2.0.5.0可重定向+ mscorlib程序4.0)
定製嘗試#1
- 資料:Silverlight的5 +。 .NET框架4.5(輪廓24)
- 複製SL5 mscorlib.dll中剖析24
- 馬克SL5的mscorlib.dll爲重定目標(改變延遲簽名)
- ReSharper的:沒能解決所有的擴展方法,誤差在泛型類型/值匹配
- 生成:成功,運行:成功
定製嘗試#2
- 簡介:Silverlight的5 + .NET Framework 4。5(輪廓24)
- 全部複製SL5的DLL來分析24
- 標記全部SL5的DLL爲重定目標(改變延遲簽名)
- 標記爲可移植的
- ReSharper的SL5的DLL之間的所有引用:未能解決所有的擴展方法,錯誤的泛型類型/值匹配
- 生成:成功,運行:成功
定製嘗試#3
- 資料:Silverlight的4 + .NET框架4.0.3(配置文件18)
- 複印SL4 mscorlib.dll中到型材18
- 馬克SL4 mscorlib.dll中作爲可重定目標(改變到延遲簽名)
- ReSharper的:成功
- 生成:成功,運行:成功
定製嘗試#4
- 簡介:Silverlight的4 + .NET框架4.0.3(輪廓18)
- 複製所有的DLL SL4來分析所有SL4的DLL到V4的18
- 組.NET運行庫版本(原來的DLL有,效果未知)
- 標記全部SL4的DLL爲重定目標(改變延遲簽名)
- 標記爲可移植的
- ReSharper的SL4的DLL之間的所有引用:成功
- 生成:成功,運行:成功
定製嘗試#5繼承#4
- 簡介:Silverlight的4 + .NET框架4.0.3(輪廓18)
- 添加SL4的System.Numerics(包括在其他SL配置文件)到RedistList \ FrameworkList.xml
- 將SL4的System.Xml.XPath(不包括在任何SL配置文件中)添加到RedistList \ FrameworkList.xml
- 結果:無法解析System.Numerics和System.Xml.XPath from def行兇的PCL引用
- 修正:參考兩個DLL文件手動 - 無法迫使他們是可移植的,儘管VS不會與非可重定向System.Numerics或System.Xml.XPath編譯由於以下
注:
- 編譯錯誤:「......在未引用的程序規定,您必須添加一個引用組裝」。發生後,所有組件均採用可移植的,但它們之間的引用之一也不變爲「可移植的」
它可以在一定程度上,但相當麻煩的輕鬆定製現有引用DLL或添加新的,也不能用一個在覆蓋引用的DLL之後驗證PCL代碼(如果可能的話)。
我知道你不是在尋找答案,告訴你只是停下來,但是你可以選擇你想要包含的框架的哪一部分,然後它就可以工作的想法是真的不是一個明智的。即使你發現某種程度上的尷尬方法,遲早你會失去信心 - 在這一點上你會浪費很多時間。 – 2013-05-04 16:23:05
但是,如果沒有適當的工具支持,它只會變得尷尬。如果有一個工具可以爲引用生成存根DLL,它會很好。 – AqD 2013-05-04 16:36:10
假設您已經足夠了解支持這些API所需的其他內容......本機代碼和其他託管代碼的所有依賴關係。我認爲這不像你期待的那麼簡單。 – 2013-05-04 16:44:35