我在PCL框架庫和使用庫的客戶端應用程序中都使用Nito.Async。 PCL lib的目標是.Net4.5 & SL5,客戶端是.Net4.5。Nuget PCL庫衝突
如果我不在客戶端應用程序中引用Nito.Async,一切都很好。但是,如果我引用它,當我運行的應用程序,一個MissingMethodException
發生:
Method not found: 'Microsoft.Runtime.CompilerServices.TaskAwaiter`1<!0> Nito.AsyncEx.AwaitableDisposable`1.GetAwaiter()'
挖多一點之後,似乎這個問題的MSBuild複製從portable-net40
的NITO LIB由PCL LIB目標引用\ bin文件夾中,然後複製客戶端在目標\ bin中引用的net45
中的Nito lib。因此,它會覆蓋第一個便攜式Nito.Async DLL ...並且當我啓動應用程序時,portable-net40
被替換爲net45
。
我看到的只有很少的選項有:
- 直接包含Nito.Async源在我的圖書館,但它意味着失去具有最多最新庫的優勢的NuGet ...
- 問Stephen Cleary將.Net45目標的DLL重命名爲
Nito.AsyncEx.Net45.dll
而不是Nito.AsyncEx.dll
(並針對每個不同的目標執行此操作),但我懷疑這是一個完美的解決方案。
我該如何處理這種DLL衝突?
對於這類問題,Nuget或MsBuild方面已經有了一些東西嗎?
我的lib是SL5&.Net45中的雙客戶端...很難放棄SL5 ... – rducom 2015-02-24 19:55:17
@sharped我在AsyncEx項目上提出了一個關於這個問題:https://github.com/StephenCleary/AsyncEx/issues/13 – 2015-02-24 21:11:30
非常感謝,我永遠不會想象這個解決方案很簡單... – rducom 2015-02-24 21:26:24