为什么NuGet中的Common.Logging使用.NET Portable?

时间:2017-07-03 17:24:12

标签: .net msbuild mono mscorlib common.logging

我正在使用:

  • MonoDevelop 7.1
  • .NET Framework 4.6.2
  • Mono 5.0.1.1(2017-02/5077205 2017年5月25日星期五09:16:53)(64位)
  • 没有PCL或个人资料(据我所知)
  • msbuild 15.2.0.0(2017年5月11日星期五17:28:41)
未指定

<NoStdLib>;也就是说,它保持默认状态。 <TargetFrameworkVersion>设置为v4.6.2。

当我在IDE中构建时,我看不到任何警告或错误。但是,当我使用

构建解决方案时
msbuild /v:detailed my.sln

我看到其中一些消息:

  Dependency "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea77
98e, Retargetable=Yes".
      Could not resolve this reference. Could not locate the assembly "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.

浏览Mono文件时,以下所有程序集都与上述版本和密钥匹配:

/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile102/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile19/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile225/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile5/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile92/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile47/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile14/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile24/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile328/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile6/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile158/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile255/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile37/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile240/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile136/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile147/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile42/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile344/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/Profile/Profile336/mscorlib.dll
/usr/lib/mono/xbuild-frameworks/.NETPortable/v4.0/mscorlib.dll

其他mscorlib程序集的版本错误,或者使用密钥令牌b77a5c561934e089而不是7cec85d7bea7798e

我的问题是:

  • 为什么我的解决方案试图引用可移植的.NET?
  • 是否有一个程序集参考树工具我可以用来找出引用的罪魁祸首是什么?
  • 为什么这是一个非致命错误,甚至根本不出现在IDE构建输出中?
  • 我是否应该手动参考其中一个组件?如果是,哪个档案?
  • 如果我没有参考其中一个组件,会产生什么后果?
  • 我的所有程序集都是强名称签名的事实会影响解决此错误的重要性吗?

提前致谢。

修改

使用monodis --assemblyref,我发现问题是Common.Logging

Common.Logging.dll
AssemblyRef Table
...
4: Version=2.0.5.0
        Name=mscorlib
        Flags=0x00000100
        Public Key:
0x00000000: 7C EC 85 D7 BE A7 79 8E 

./Common.Logging.Core.dll
AssemblyRef Table
...
1: Version=2.0.5.0
        Name=mscorlib
        Flags=0x00000100
        Public Key:
0x00000000: 7C EC 85 D7 BE A7 79 8E 

./Common.Logging.NLog41.dll
AssemblyRef Table
...
6: Version=2.0.5.0
        Name=mscorlib
        Flags=0x00000100
        Public Key:
0x00000000: 7C EC 85 D7 BE A7 79 8E 

尽管我的packages.config特别要求.NET 4.62:

  <package id="Common.Logging" version="3.3.1" targetFramework="net462" />
  <package id="Common.Logging.Core" version="3.3.1" targetFramework="net462" />
  <package id="Common.Logging.NLog41" version="3.3.1" targetFramework="net462" />

所以我猜这是Common.Logging中的错误?

0 个答案:

没有答案