短版的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