我的工作与VS 2012的动态库文件(.dll)和x64模式下的C ++ / CLI项目。
如果我切换模式以静态库,我得到下面的错误。
错误1个错误C1107:无法找到程序集'mscorlib.dll中':请使用/ AI指定程序集搜索路径或通过设置LIBPATH环境变量C:\车厂\ MAIN \电流\ SLN \ ALibraryProject \ Stdafx.cpp 11个ALibraryProject
我试图消除参照的mscorlib.dll然后重新添加:
项目>属性>常规>通用属性
但是,这并没有帮助。 当我知道VS处理参考.NET程序集,我不想一个磁盘文件引用添加到它,因为它似乎不合逻辑! 有没有人之前面对这个?
如果我切换模式以静态库
当您尝试建立与效果/ CLR静态库这不是你得到的典型错误。 我必须假设你已经与项目设置摆弄摆脱你的高深莫测的链接错误的,当你尝试这样做。
核心问题是,C ++ / CLI构建系统不支持包含MSIL静态库。 托管代码不使用连接器,结合发生在运行时。 这使得静态库和DLL消失的本质区别。 因此,微软决定不支持它,因为它并没有实现它多大意义。 不幸的是足够的,当你想试试做他们不大声嚷嚷,你得到的链接错误,不给予足够的暗示,你做了什么不对的。 解决办法,像ILMerge合并没有任何工作,就不能处理混合模式组件。 合并本地代码段及其相关的重定位表项是非常untrivial。
请记住,这是很好链接本地静态库。 一个典型的C ++ / CLI项目只需要在效果/ CLR建成裁判类包装。 您可以胶水库的本机代码的任何量到最后的组装。
我被迫理论化实际的编译错误,太多的程序员得到这个错误的另一个原因是没有什么关系建立静态库和他们骚扰我的意见。
一定要提防针对不同版本的.NET比你的机器上安装了一个相当危险的事,特别是因此,如果你想要的目标4.0,你必须安装4.5.x。 在.vcxproj文件中的关键元素是<TargetFrameworkVersion>
如果你开始这个项目针对老.NET版本这将丢失,你必须自己插入。 该IDE也不支持改变它,如果它存在 ,再由手工编辑。
这足以哄的MSBuild到生成正确的编译命令。 您可以验证如果摇出好了,看在你的项目的调试版本目录的* .tlog子目录。 该cl.command.1.tlog文件显示被传递到编译器的选项。 它应该包含以下内容:
/ AI “C:\ Program Files文件(x86)的\参考大会\微软\ Framework.NETFramework \ V4.0”
/ FU “C:\ Program Files文件(x86)的\参考大会\微软\ Framework.NETFramework \ V4.0 \ mscorlib.dll中”
需要注意的子目录,它与您的预期目标.NET匹配非常重要。 V4.0在这个例子。 而且非常,非常重要的是,它并不指向C:\ WINDOWS \ microsoft.net,仅供参考组件的传统位置。
从VS2010编译器转换我的解决方案,以VS2013编译的时候我有同样的问题。
我通过改变项目设置(含管理.cpp文件即是引发此错误的项目)如下解决它:在项目设置| C / C ++ | 一般| 其他使用#using目录我加入了宏$(FrameworkPathOverride)。 这解决为您定位.NET,该版本的参考汇编目录这在我的情况下为C:\ Program Files文件(x86)的\参考大会\微软\ Framework.NETFramework \ V4.5.1
我也有同样的问题。 有一个DLL不能正常工作,因为我需要一个.NET对象提供一个原生的C ++封装,因此可以实现一个natice C ++接口 - 我不能在一个DLL接口使用.NET - 这给出了一个编译错误
这个工作作为静态库在VS 2010中(在.NET 4中)
我的一些可执行文件和DLL也有一些代码使用/ clr的。 他们没有问题。 我并不想使净Lbirary。
我解决它通过消除旧的和没有更新混合lib中,这也是只有在调试配置中配置的依赖,并作为结果,它开始得到同样的错误和你后,我改变了一些代码。
这不是简单的找到它,因为错误是不明确的,并且依赖经在项目设置“附加依赖”成立。
打开Visual Studio和卸载,然后你的项目进入项目文件夹,打开文件.vcxproj。 搜索标签“targetFrameworkVersion”(如果不存在则意味着UR项目未使用点净frameworks.so变化的不要求)将其更改为所需的版本保存文件。 现在重新加载项目。
文章来源: Visual Studio 2010 C++/CLI in Static Library Mode: could not find assembly 'mscorlib.dll'