短版的NuGet:強制項目選擇了更爲具體的目標框架在netstandard
我創作一個包,面向.NET標準1.3和1.6。我的1.6版本參考文獻System.Runtime.Loader
。這個軟件包有一個用於MonoAndroid框架的placeholder,這意味着我的NuGet軟件包現在無法在Android 7.x項目中加載。
我的.NET標準1.3版本沒有這種依賴性。我如何強制NuGet加載Android項目的netstandard-1.3版本,而不是netstandard-1.6?
更多詳細信息
當我嘗試在使用project.json一個Android 7項目加載我們當前的包,我看到下面的錯誤消息:
System.Runtime.Loader 4.3.0 provides a compile-time reference assembly for System.Runtime.Loader on MonoAndroid,Version=v7.1, but there is no run-time assembly compatible with win.
我的理解是,這是由System.Runtime.Loader NuGet package使用多個目標框架的佔位符造成的。此封裝件的結構,是因爲這樣:
lib -> netstandard1.5 -> System.Runtime.Loader.dll
MonoAndroid10 -> _._
我還包一個netstandard-1.3構建我的包,它不引用System.Runtime.Loader組件。我很高興Android用戶能夠在1.3版本中獲得簡化的功能 - 但我無法弄清楚如何強制NuGet選擇.NET Framework 1.6的框架。
我目前的封裝結構如下:
lib -> netstandard1.3 -> build13.dll
netstandard1.6 -> build16.dll
我試圖將其更改爲下面的 - 給力的NuGet挑選更具體的目標框架,但的NuGet似乎更喜歡netstandard1.6超過MonoAndroid 。 (我也嘗試MonoAndroid10)
lib -> netstandard1.3 -> build13.dll
MonoAndroid -> build13.dll
netstandard1.6 -> build16.dll
有什麼辦法,作爲一個包的作者,我可以強迫我的下游用戶的Android項目使用.NET 1.3標準建立我的項目,而不是1.6構建,由於System.Runtime.Loader包中的佔位符項目而無法恢復?
如果存在更具體的目標框架,NuGet應該選擇比netstandard更具體的目標框架。如果這沒有發生,那麼我將捕獲NuGet輸出並在http://github.com/nuget/home/issues –
@Chris上打開一個錯誤,當您更改爲打包以包含「MonoAndroid」的dll時,您是否也更新nuspec以包括mono android版本的依賴組?另外,在這種情況下它應該是'MonoAndroid10'。 –
@MartinUllrich我做到了。我注意到生成的nuspec將'MonoAndroid10'(我輸入的)的tfm更改爲'MonoAndroid1.0' - 我不知道這裏是否有任何關聯。 – Chris