在Visual Studio的更高版本中运行vs2005 c ++项目

时间:2013-06-02 02:26:15

标签: 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)的调试版本

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

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

cli程序集依赖关系依赖于; vs2005左侧vs 2008右侧

enter image description here

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

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

enter image description here

我已经尝试将清单文件从vs2005项目复制到v​​s2010项目,但这不起作用(相同的错误消息)。我还禁用了嵌入式清单,并将生成的.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中正常工作。

3 个答案:

答案 0 :(得分:4)

我发现Daffodil for Visual Studio完全符合我的需要,即在Visual Studio 2010中针对vc80进行编译。安装完成后,Platform Toolset下拉列表会有更多选项:

nb,你仍然需要安装相关版本的Visual Studio,例如,如果你需要vs2005定位vc80。 nb2,Intellisense is broken在vs2010中对于cli / c ++,这是在研究让项目在vs2010上工作的时间之后的一个主要的失望

enter image description here

答案 1 :(得分:0)

您是否考虑为申请制作清单?我的意思是,错误消息说问题是清单缺乏,所以也许创建一个清单(通过项目设置)或添加一个手写的清单就足够了?

请参阅:Problem loading RT without Manifest

答案 2 :(得分:0)

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

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