混合模式库和CRT依赖项-HELP
Mixed Mode Library and CRT Dependencies - HELP
好吧,在做了大量研究并尝试了我能找到的几乎所有托管CPP Redist之后,以及尝试将我的DLL本地复制到应用程序的执行目录之后,我无法弄清楚这个混合模式库缺少什么依赖项。
基本上,我有一个大型的C#应用程序,我正在尝试使用我制作的混合模式库。在开发机器上,它运行得很好(当然),但当需要加载库以使用时会部署它——由于缺少CRT依赖性,它会出现异常(我认为)。
我已经使用依赖项助行器检查了所有引用的DLL,并确保它们存在于部署机器上,但运气不好,我想知道我是否缺少了一些需要注册的依赖项,但我不知道是什么。
当代码试图从混合模式库实例化一个类时,我会得到以下异常。
异常详细信息:System.IO.FileLoadException:未能加载文件或程序集"USADSI.MAPI,版本=1.0.3174.25238,区域性=中性,PublicKeyToken=null'或其依赖项之一。这应用程序无法启动因为应用程序配置不正确。重新安装应用程序可能会解决此问题。(HRESULT:0x800736B1的异常)
我正在使用指定了/clr:oldSyntax的VS2008 SP1编译库。
中间清单如下:
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level='asInvoker' uiAccess='false' />
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>
我可以根据需要提供更多的信息,不幸的是,我不擅长制作混合模式库,所以这让我很反感
如果有人能提供任何建议,我将不胜感激!
您在目标机器上部署CRT库了吗?远景:由于您依赖32位代码,因此应该在Build属性选项卡中将Target Platform设置为x86。
编辑:使用Sxstrace.exe实用程序并排解决问题的疑难解答,在Vista上可用。
通常,我发现从开发人员维护和全面构建操作的角度来看,pragma注释样式的清单分离更加无错误。XML清单极其混乱。
链接器的操作方式和C代码的常见编译,以及你只需将其放入一个源文件中的事实,让一切都感觉更"团结";
#pragma comment(linker,
""/manifestdependency:type='Win32' "
"name='Microsoft.Windows.Common-Controls' "
"version='6.0.0.0' "
"processorArchitecture='*' "
"publicKeyToken='6595b64144ccf1df' "
"language='*'"")
我第一次在目标机器上部署VS 2005应用程序时遇到了类似的问题——必须引入MSVCRT80 DLL。你是说你已经有了2008VS运行库吗?
ETA:还有一个愚蠢的问题,但你确定你有CRT Runtime(链接到上面)和.NET Runtime,它们的版本与你编译的版本相同(可能是3.5)吗?你可能已经知道了(尤其是考虑到你的分数),但它们是两件不同的事情。
我发现了一个似乎有效的解决方案,尽管我不太喜欢它。
我不得不复制文件夹:
Microsoft.VC90.CRT&Microsoft.VC90.MFC
发件人:Program Files\Microsoft Visual Studio 9.0\VC\redist\x86
在部署的应用程序目录中,我只是不明白为什么这似乎有效,而可再发行文件什么也没做。
编辑:查看清单,我可能不需要复制MFC目录
解决此问题的最佳方法是下载进程监视器,该监视器免费:http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
添加一个仅监视进程的筛选器,它将显示进程尝试的所有文件访问。这将显示它找不到的确切dll。
当遇到同样的问题时,我总是使用这个——如果只有微软在抛出的异常中填写文件名,一切都会更容易。
- 如何从C++中的依赖类型中获得它所依赖的类型
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 将依赖名称显式标记为类型名和模板的奇怪之处
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- C++GTKMM gui循环依赖关系
- 通过ccmake在cmake中缓存依赖选项
- 当基类是依赖类型时,这是一个缺陷吗
- 从不同的附加依赖项中识别等同命名的函数
- 如何在 CMake 中对目标依赖项进行分组?
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 为什么构建目录中新构建的共享库与安装目录中的副本具有不同的依赖项集?
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 通过依赖类型使用非类型模板参数的单类型模板参数类模板的部分专用化
- 为什么内存屏障依赖于变量?
- node-gyp 的先有鸡还是先有蛋的问题:指向依赖项中的头文件
- 反转依赖于 end() 的迭代器
- GCC,CMake,预编译标头和维护依赖项
- 使用 'typename' 关键字将非类型视为依赖上下文中的类型
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 混合模式库和CRT依赖项-HELP