在dll构建中出现的错误版本的虚假mscorlib

时间:2014-08-07 01:15:11

标签: visual-studio dll c++-cli .net-assembly

我正在使用.NET Framework 2.0构建Cpp / Clr dll。建立得很好。但是,当我创建一个示例程序来使用dll时,也使用2.0,我收到此错误:

主要参考" C:\ ... \ MemBuffDll.dll"无法解析,因为它与.NET Framework程序集间接依赖" mscorlib,版本= 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089"它有更高的版本" 4.0.0.0"比版本" 2.0.0.0"在当前的目标框架中。

我非常仔细地重建整个解决方案(不太难,只有两个项目),并确保我在重新创建时只使用从一个文件到另一个文件的剪切和粘贴代码。我非常非常,以确保我指定了2.0 Framework。

当我排除示例解决方案时,一切都很好。当我重新加载它时,我收到上述消息。因此,我搜索了整个解决方案中每个文件的内容,并在.dll和以.metagen结尾的文件中找到了引用。感兴趣的metagen线是:

ImageRuntimeVersion: v4.0.30319
Assembly MemBuffDll, Version=0.0.*, Culture=Invariant Language (Invariant Country): 
    hash=SHA1, flags=PublicKey
Assembly mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: 
    hash=None, flags=None
Assembly mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: 
    hash=None, flags=None
Assembly System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: 
    hash=None, flags=None

为什么这两行有4.0.0.0?这应该是2.0版本。

真的很困惑, -greenhorn greg

1 个答案:

答案 0 :(得分:3)

问题的答案是:

" C ++ IDE不支持多目标"

因为当我在其他帖子中看到这个答案时,我并不理解这个答案,所以我会尝试澄清其他可怜的灵魂,这些灵魂偶然发现了这个问题。"特征"

这意味着当我正在进行C ++项目时,我的VS 2010无法(正确)定位.net 2.0。我已经为我的解决方案中的两个项目指定了.net framework 2.0,并且接受了设置。但是,C ++部分(实际上是C ++ / CLI)实际上是使用两个引用构建的,包括我指定的v2.0和我的VS 2010的本机(?)v4.0。注意它没有抛出错误或警告,只有.dll和.metagen文件包含此引用。

当我的解决方案中的其他项目试图引用该项目时,我收到了我的OP中提到的错误。它不会建立。

问题的解决方案有两个:

  • 安装VS 2008并在其下重新创建问题项目。可能需要重构。请注意,Express版本的工作正常。
  • 将目标更改为.net 4.0。这就是我所做的,因为重构dll将是PITA,而目标平台(Windows Embedded 8 Standard)支持.net 4.0

希望这有助于像我这样遇到其他人。