C++ 运行vs2005 c++;visual studio更高版本中的项目

C++ 运行vs2005 c++;visual studio更高版本中的项目,c++,visual-studio,c++-cli,C++,Visual Studio,C++ Cli,我有一个在VS2005中创建的C++/CLI项目。我希望在VS2010(或2012)中运行它,因为这是我的主要IDE,我还需要修改C++/CLI项目中的一些内容,并且必须来回切换到vs2005以重新编译、复制等,这很令人恼火。 另一个重要原因是,我在VS2010/2012中运行的项目位于.NET4中,因此没有选择将所有内容转移到VS2005 该项目依赖于非托管第三方库,它们本身依赖于C++可再分布库(MSVCR80.DLL、MSVCM80.DLL、MSVCP80.DLL)的调试版本。 当我第一次

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

该项目依赖于非托管第三方库,它们本身依赖于C++可再分布库(MSVCR80.DLL、MSVCM80.DLL、MSVCP80.DLL)

的调试版本。 当我第一次运行升级的项目时,我收到“找不到指定的模块”——

就在那时,我注意到cli项目是根据msvc的更高版本(msvcr90.dll)编译的

cli程序集依赖项(根据依赖项);vs2005位于左侧,VS2008位于右侧

有没有办法使用2005库制作更高版本的VS compile?

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

我已尝试将清单文件从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-当我尝试使用其中一种方法时,尝试读取或写入受保护内存。这段代码在vs2005中运行良好。

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

请参阅:

来自

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

我发现了哪些正是我需要的,即在VisualStudio2010中针对vc80进行编译。安装后,“平台工具集”下拉列表将获得更多选项:

注意,您仍然需要安装Visual Studio的相关版本,例如,如果目标是vc80,则需要vs2005。 nb2,在vs2010 for cli/c++中,在花了大量时间研究让项目在vs2010上工作之后,这是一个很大的失望


请解释?一般来说,当应用程序的不同部分依赖于VC 2005和2008时,这不是问题。两个运行库都应该安装来运行这样的程序。并且在VisualStudio环境下运行,即调试。C++编译器的一个版本(CL.exe)与MVCR.T.LIB的一个版本(由/Cyror选项触发,由/CLR选项隐含触发)。此版本的MSVCRT.LIB将在运行时将您的应用程序与特定版本的MSVCRT DLL(适用于VS2012的MSVCRT110.DLL、适用于VS2010的MSVCRT100.DLL等)链接起来。你不能改变这一点。如果您想使用具有管理C++代码的VisualStudio的更新版,您必须部署MSVC运行时的适当版本。@ SimonMourier谢谢。那么,与基于msvcrt80.dll构建的第三方LIB一起运行(生产和visual studio中)又如何呢?