我正在编写一个Xamarin.Android应用程序,并希望引用我的库的NuGet包,这是一个dotnet
- 目标DNX类库。当我这样做时,编译器会发出警告
The type 'DateTime' is defined in an assembly that is not referenced.
You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, ...
并且IDE抱怨像
这样的消息Argument type 'System.DateTime [mscorlib, Version=2.0.5.0, Culture ...]' is
not assignable to parameter type 'System.DateTime [mscorlib, Version=4.0.0.0, ...]'
虽然构建成功并且代码有效。如何在库/ project.json
?
在工作中,我们目前正在将项目移植到project.json
- 类型(包,DNX,无论名称是什么)。目前,我们正在运行beta 7 Visual Studio集成,一般来说,一切正常。
我现在想要在ASP.NET 5和Xamarin.Android项目(来自NuGet提要)中重用我们的模型库之一。
由于我们对Xamarin项目中针对.NET 4.5.1的类库完全没有运气,因此我将模型库迁移到定位net45
,dnx45
和dotnet
的DNX项目(支持dnxcore50
,如here所述),框架部分在project.json
正在
"frameworks": {
"net45": {
"frameworkAssemblies": {
"mscorlib": "4.0.0.0",
"System.Xml": "4.0.0.0",
"System.Collections.Concurrent": "4.0.0.0"
}
},
"dnx45": {
"frameworkAssemblies": {
"mscorlib": "4.0.0.0",
"System.Xml": "4.0.0.0",
"System.Collections.Concurrent": "4.0.0.0"
}
},
"dotnet": {
"dependencies": {
"System.Collections": "4.0.0",
"System.Linq": "4.0.0",
"System.Runtime": "4.0.0",
"System.Reflection": "4.0.0",
"System.Runtime.Extensions": "4.0.0",
"System.Threading": "4.0.0",
"System.Text.RegularExpressions": "4.0.0",
"System.Text.Encoding": "4.0.0",
"System.Collections.Concurrent": "4.0.0"
}
}
},
虽然this article建议使用net45
作为monoandroid51
项目的目标,但每当我向其添加NuGet包时,Android项目都会引用dotnet
库。
package.json
然后包含
<package id="My.Awesome.Lib" version="1.2.3-foo9" targetFramework="monoandroid51" />
并且.csproj
有
<Reference Include="My.Awesome.Lib, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\My.Awesome.Lib.1.2.3-foo9\lib\dotnet\My.Awesome.Lib.dll</HintPath>
<Private>True</Private>
</Reference>
除非我4.0.0
部分的版本号高于dependencies
并且基本上在我做的时候燃烧,否则此操作到目前为止还是有效的,但是以下
然而当我构建项目时,我会收到编译器警告
1>C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1706,3):
warning MSB3277: Found conflicts between different versions of the
same dependent assembly that could not be resolved. These reference
conflicts are listed in the build log when log verbosity is set to detailed.
在库参考之后。在Visual Studio中,每当我将Android项目中的值传递给其中一个库类型时,我都会得到带有消息的红色波浪线
The type 'DateTime' is defined in an assembly that is not referenced.
You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, ...
以及
Argument type 'System.DateTime [mscorlib, Version=2.0.5.0, Culture ...]' is
not assignable to parameter type 'System.DateTime [mscorlib, Version=4.0.0.0, ...]'
这非常有意义,因为Xamarin BCL被标记为运行时版本v2.0.50727
,而我的库是v4.0.30319
。
我现在想知道我是否需要针对某些PCL进行定位,或者是否还有其他东西丢失了。
答案 0 :(得分:1)
这不支持YET。为了支持这种情况,还需要更新nuget以负责管理正在考虑简化参考的新标记。
将来,您只需定位netstandard1.4
而不是dnxcore50
,您就可以运行所有内容并与Xamarin兼容。
这是事情的发展方向。简化定位多个平台的疯狂。这是我获得netstandard*
绰号的地方,当然,直到它被释放......这仍然有可能发生变化。