首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Visual 2010 C++/CLI在静态库模式下:找不到程序集“mscorlib.dll”

Visual 2010 C++/CLI在静态库模式下:找不到程序集“mscorlib.dll”
EN

Stack Overflow用户
提问于 2013-04-21 19:50:56
回答 5查看 20K关注 0票数 16

我正在用VS 2012开发一个动态库(.dll)和x64模式的C++/CLI项目。

如果我切换到静态库模式,我会得到下面的错误。

LIBPATH环境变量C:\Depot\Main\Current\Sln\ALibraryProject\Stdafx.cpp 1 ALibraryProject,请使用LIBPATH环境变量C1107 1 ALibraryProject指定程序集搜索路径

我尝试删除对mscorlib.dll的引用,然后将其再次添加到:

项目>属性>一般>公共属性

但这没什么用。因为我知道VS处理对.NET程序集的引用,我不想向它添加磁盘文件引用,因为它看起来不合逻辑!以前有人面对过这个吗?

EN

Stack Overflow用户

回答已采纳

发布于 2013-04-21 20:16:31

如果我将模式切换到静态库

当您尝试使用/clr构建静态库时,这并不是典型的错误。我必须假设您一直在修改项目设置,以消除在尝试这样做时遇到的无法理解的链接器错误。

核心问题是C++/CLI构建系统不支持包含MSIL的静态库。托管代码不使用链接器,绑定发生在运行时。这使得静态库和DLL之间的本质区别消失了。所以微软决定不支持它,因为它没有多大的意义来实现它。不幸的是,当你试图这么做的时候,他们没有大声喊叫,你得到的链接器错误没有给出足够的提示你做错了什么。解决方法,比如与ILMerge合并也不起作用,它不能处理混合模式的程序集。合并本机代码部分及其关联的重定位表条目非常重要。

请记住,链接本机静态库是很好的。典型的C++/CLI项目只有需要使用/clr构建的ref类包装器。可以将库中的任何数量的本机代码粘合到最终程序集中。

我不得不对实际的编译错误进行理论分析,太多的程序员得到这个错误的另一个原因与构建静态库无关,他们在评论中骚扰我。

请注意,针对与您安装在计算机上的版本不同的.NET是一件相当危险的事情,特别是如果您想要目标为4.0,并且安装了4.5.x。.vcxproj文件中的关键元素是<TargetFrameworkVersion>。如果您启动针对旧.NET版本的项目,您必须自己插入它,这将是缺失的。IDE也不支持在它存在的情况下更改它,同样是手工编辑。

这足以引导MSBuild生成正确的编译命令。您可以验证这个平移是否正常,请查看项目Debug目录的*.tlog子目录。1.tlog文件显示了传递给编译器的选项。它应包括:

/AI"C:\Program (x86)\Reference /AI /FU"C:\Program (x86)\Reference /FU

注意子目录,非常重要的是它与预期的.NET目标相匹配。本例中的v4.0。而且非常非常重要的一点是,它不能指向c:\windows\microsoft.net,这是引用程序集的遗留位置。

票数 5
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16135490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档