我有一个VS2008专业解决方案,我尝试将其转换为VS2010 Professional(RTM从MSDN下载),我遇到了一些未引用和托管的C++ DLL的问题由一个C#应用程序。使用托管和非托管C++将VS2008升级到VS2010的问题
的C#应用程序设置为面向.NET 3.5(因为它是在VS2008的版本),但是当我尝试编译它,我得到了很多类似的警告:
主要参考“XXXX。 dll“可能 不能解决,因为它具有间接依赖于.NET 框架程序集”(各种程序集 名称)“,版本4.0.0.0 ...其中 更高版本”4.0.0.0“比 当前版本“3.5.0.0” 目标框架
并最终导致无法构建。
从这我明白,它是在.Net框架版本不匹配。所以我看看非托管C++ DLL项目的属性,在“Common Properties-> Framework and References”下面我可以看到“Targeted framework:.NetFramework,Version = v4.0”为什么一个纯C++ DLL现在的目标是一个.Net框架,当它确实没有在VS2008版本中。然后我再加上这个惊叹号,因为似乎没有办法改变这种情况。我也看看托管的C++,看到同样的事情:瞄准.Net版本= 4.0版,并再次没有办法改变这一点。
在C++ General属性中有一个“公共语言运行时支持”的条目,我将它设置为“没有公共语言运行时支持”,但似乎没有做任何事情。
所以我有两个问题:
为什么我的纯C++ DLL现在被标记为目标.NET框架?
如何更改/删除此定位?
解决方案
按照汉斯的答复,他提供的链接我现在看到我有3种选择:
留在VS2008和一切工作
同时安装VS2008 SP1 和 VS2010 我可以有.Net 3.5 c#应用程序和C++托管代码按照Hans提供的链接。
将所有内容移动到VS2010并将 移动到最小.Net 4。0所有我 C#应用程序
我真的很恼火不得不做出这样的选择,因为MS刻意选择了从VS2008转向VS2010时,打破功能。这不是我期望的那种行为。我期待转换该项目,并以VS2005转换为VS2008的相同方式进行编译。
幸运的是,我确实需要去.Net 4.0,但我并不期望这么快就要做。
更新
我决定搬家到.NET 4框架,遇到引用托管C++从C#项目的项目问题。我是越来越喜欢错误下面试图将引用添加到++托管代码项目
一提到“的Myproj”的C时,不能添加 。程序集必须具有'dll' 或'exe'扩展名才能被引用为 。
Google引导我走到“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)\
现在我(在某种程度上)快乐
是的,该链接解释得很好。但现在我比任何事都更恼火。 – 2010-06-29 19:53:08
你对我的疑惑是对的,但我仍然有点推迟,非托管C++的属性甚至提到.Net框架! – 2010-06-29 20:02:50