5

我有一个在 VS2005 中创建的 C++/CLI 项目。我希望在 VS2010(或 2012)中运行它,因为这是我的主要 IDE 我还需要修改 C++/CLI 项目中的一些东西,而且不得不来回切换到 vs2005 来重新编译、复制,这很烦人等等。另一个重要的原因是我在 VS2010/2012 中运行的项目是在 .NET4 中,所以没有选择将所有内容移至 VS2005。

该项目依赖于非托管第三方库,这些第三方库本身依赖于 c++ 可再发行库的调试版本(msvcr80.dll、msvcm80.dll、msvcp80.dll)

当我第一次运行升级后的项目时,我收到“找不到指定的模块”-

然后我注意到 cli 项目正在针对更高版本的 msvc (msvcr90.dll) 进行编译

根据depends的cli程序集依赖项;左边是 vs2005,右边是 2008

在此处输入图像描述

有没有办法使用 2005 库编译更高版本的 VS?

更新它对哪个编译器并不重要(并且可能无论如何都不可能)但是是否可以并排运行和调试?当我尝试运行已编译的项目时,我收到以下错误消息:

在此处输入图像描述

我尝试将清单文件从 vs2005 项目复制到 vs2010 项目,但这不起作用(相同的错误消息)。我还禁用了嵌入式清单并将生成的 .manifest 文件替换为来自 vs2005 的文件,这也不起作用。

update2通过在清单中指定 msvcr 库,我已经解决了这个错误:

<dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>

AccessViolationException - Attempted to read or write protected memory但是现在当我运行我的应用程序时,当我尝试使用其中一种方法时,第三方库之一会抛出一个错误。这段代码在 vs2005 中运行良好。

4

3 回答 3

4

从那以后,我发现了Daffodil for Visual Studio,它完全符合我的需要,即在 Visual Studio 2010 中针对 vc80 进行编译。安装后,Platform Toolset 下拉菜单有更多选项:

注意,您仍然需要安装相关版本的 Visual Studio,例如,如果针对 vc80,您需要 vs2005。nb2,Intellisense在 cli/c++ 的 vs2010 中被打破,这是在研究让项目在 vs2010 上工作的时间量之后的一个重大失望

在此处输入图像描述

于 2013-06-13T12:55:21.457 回答
0

您是否考虑过为应用程序制作清单?我的意思是,错误消息表明问题在于缺少清单,因此创建清单(通过项目设置)或添加手写清单就足够了?

请参阅:在没有清单的情况下加载 RT 时出现问题

于 2013-06-12T10:45:00.000 回答
0

来自http://www.davidlenihan.com/2007/07/winsxs.html

“那么应用程序如何知道它需要加载哪个版本的 DLL?这就是“清单”发挥作用的地方。清单是一个 XML 文件,其中包含用于在 C:\Windows\winsxs 中创建目录的信息,因此可以加载特定的 DLL。”

于 2013-06-12T11:23:58.137 回答