You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VS2010编译C++/CLR .NET Framework3.5仍依赖4.0及C4945警告问题咨询

解决C++/CLR .NET 3.5项目依赖.NET 4.0及C4945警告问题

我之前在VS2010里搞C++/CLR项目对接.NET 3.5时也碰到过一模一样的问题,给你整理几个能解决的步骤:

先搞定C4945的Action符号冲突警告

这个警告完全是因为项目同时拉了.NET 4.0版本的mscorlib.dll和.NET 3.5的System.Core.dll,导致System::Action被重复导入了。你可以这么修:

  • 打开项目属性页,到配置属性 -> C/C++ -> 常规,检查「附加包含目录」,把里面不小心加的.NET 4.0路径(比如c:\windows\microsoft.net\framework\v4.0.30319\)删掉。
  • 再去配置属性 -> 链接器 -> 输入,看「附加依赖项」,确保只留.NET 3.5的程序集引用,把.NET 4.0的mscorlib.dll移除。
  • 代码层面也可以加个限定,避免歧义:
    // 显式指定使用System.Core里的定义
    #using <System.Core.dll> as_friend
    // 或者使用时明确命名空间
    System::Action^ myAction = gcnew System::Action(/* 你的方法 */);
    

彻底移除项目对.NET 4.0的依赖

VS2010默认有点“偷懒”,哪怕你选了.NET 3.5,某些设置还是会偷偷指向.NET 4.0,得手动改:

  • 项目属性配置属性 -> 常规里,把「公共语言运行时支持」严格设为.NET Framework 3.5,别选任何带v4.0的选项。
  • 配置属性 -> C/C++ -> 所有选项,搜「clr」,确认/clr参数后面跟的是:v2.0.50727(这是.NET 3.5对应的CLR版本),不是:v4.0
  • 把项目的输出目录和中间目录全清了,再重新生成——旧的编译缓存经常会留着.NET 4.0的引用,清干净就好了。
  • 检查你引用的第三方库,要是有依赖.NET 4.0的,必须换成.NET 3.5兼容的版本,不然前面的操作全白搭。

最后验证一下

编译完之后,用ildasm.exe打开你的DLL,看程序集清单,确认所有引用的程序集版本都是2.0.0.0(对应.NET 3.5),而不是4.0.0.0。然后在只装了.NET 3.5的机器上跑一遍,确认不会弹出.NET 4.0缺失的错误。

内容的提问来源于stack exchange,提问作者Dave Gahan

火山引擎 最新活动