我有一个VS2008专业的解决方案,我试图转换为VS2010专业(RTM从MSDN下载)今天,我遇到一些问题与一些非托管和管理的C++ DLL,这是引用C语言应用程序。
C应用程序被设置为目标.NET 3.5(就像在VS2008版本中一样),但当我尝试编译它时,会收到很多警告,例如:
主引用“XXXX.dll”可以
因为它有一个
对.NET的间接依赖
框架组件”(各种组件
名称)”,版本4.0.0.0…哪个有
版本“4.0.0.0”高于
当前版本“3.5.0.0”
目标框架
最终我会失败。
由此我了解到.NET框架版本不匹配。因此,我研究非托管C++ DLL项目的属性,在“公共属性-gt;框架和引用”下,我可以看到“目标框架:NetFramework,版本=v4.0”。
所以我去WTF!?!?!?为什么纯C++ DLL现在的目标是.NETFramework,因为它肯定没有在VS2008版本中运行。然后我又加了一句感叹词,因为似乎没有办法改变这句话。我还查看了托管C++并看到了同样的事情:目标.NET版本= v4.0,而且根本没有办法改变这一点。
在C++通用属性中,有一个“公共语言运行时支持”的条目,我将其设置为“没有公共语言运行时支持”,但似乎没有做任何事情。
所以我有两个问题:
-
为什么我的纯C++ DLL现在被标记为以.NET框架为目标?
-
如何更改/删除此目标?
解决方案
根据汉斯的回复和他提供的链接,我现在看到我有三个选择:
-
留在VS2008,一切正常
-
保留两个VS2008 SP1
和
VS2010
安装以便我可以使用.NET
3.5汉斯应用程序和C++托管代码,由链接提供。
-
将所有内容移至VS2010并移动
对于所有我的
C应用程序
我真的很恼火必须作出选择,因为微软故意选择打破功能,从VS2008移动到VS2010。这不是我所期望的那种行为。我希望转换这个项目,让它以从VS2005到VS2008的相同方式编译,而不产生任何问题。
幸运的是,我确实需要转到.NET 4.0,但我只是没想到这么快就要这么做。
更新
我决定移动到.NET 4框架,并且遇到了引用C++项目中的托管C++项目的问题。当试图将引用添加到C++托管代码项目时,我会遇到如下错误
无法引用“myproj”
补充。程序集必须具有“dll”
或“exe”扩展,以便
引用。
谷歌引领我走向
cli c project cannot be referenced from c project allowing only assembly dll
“在管理C++项目的输出路径中,出现了一个无关的”。原始VS2008输出路径被指定为
$(SolutionDir)\$(ProjectName)\$(Configuration)\
但是在vs2010项目中,solutiondir宏有一个尾随的\”(或者vs2008版本不关心它),给出了如下路径
c:\projects\thisproject\solution\\projectname\configuration\
当试图添加对托管C++代码的引用时,VS2010会在该路径上运行。我的解决方案是将输出路径更改为
$(SolutionDir)$(ProjectName)\$(Configuration)\
现在我很高兴