我有一个VS2008 Professional解决方案,我今天尝试转换为VS2010 Professional(从MSDN下载RTM),我遇到了一些由C#应用程序引用的非托管和托管C ++ DLL的问题。
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”
所以我去WTF!?!?!?,为什么纯粹的C ++ DLL现在以.Net框架为目标,当它确定在VS2008版本中没有。然后我加入了感叹,因为似乎没有办法改变这一点。我还看一下托管C ++并看到同样的事情:定位.Net version = v4.0,再也无法改变这一点。
在C ++ General属性中有一个“公共语言运行时支持”的条目,我将其设置为“没有公共语言运行时支持”,但似乎没有做任何事情。
所以我有两个问题:
为什么我的纯C ++ DLL现在被标记为以.Net框架为目标?
如何更改/删除此定位?
解决方案
根据Hans的回复和他提供的链接,我现在看到我有3个选择:
留在VS2008,一切正常
同时保留VS2008 SP1 和 VS2010 安装,以便我可以拥有.Net 3.5个c#应用程序和c ++托管代码,根据Hans提供的链接。
将所有内容移至VS2010并移动 至少为.Net 4.0 c#apps
由于MS在从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)\
现在我(有点)开心
答案 0 :(得分:3)
密切关注球,你得到的警告是托管的 C ++程序集。 非托管 DLL的平台目标设置无关紧要,它在构建时不会使用任何.NET引用。
是的,他们无法在C ++ IDE中使平台目标设置可编辑,VS2008工具链需要为3.5构建C ++ / CLI程序集。这个blog post解释了解决方法。如果您对此不满意,可以对此feedback article进行投票。