编译 C++/CLI DLL 时出现警告

Posted

技术标签:

【中文标题】编译 C++/CLI DLL 时出现警告【英文标题】:Warning when compiling a C++/CLI DLL 【发布时间】:2019-02-25 13:15:55 【问题描述】:

我正在开发一个面向 .NET 4.0 的 C++/CLI,它使用 Google 日历 API 引用我的 C# 项目。 问题是,当我尝试编译 C++ .DLL 时,它给了我以下警告:

无法解析主要引用“GoogleCalendar.dll”,因为它间接依赖于无法解析的框架程序集“System.Net.Http,Version=1.5.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”在当前目标框架中解决。 “.NETFramework,版本=v4.0”。要解决此问题,请删除引用“GoogleCalendar.dll”或将您的应用程序重新定位到包含“System.Net.Http, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的框架版本

我找不到任何解决这个问题的方法,我的 app.config 已经在尝试重定向 System.Net.Http:

 <dependentAssembly>
     <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
     <bindingRedirect oldVersion="0.0.0.0-2.2.29.0" newVersion="2.2.29.0" />
 </dependentAssembly>

有什么想法吗?

编辑:另一个问题(不知道是否相关),当我编译引用 C# 的 C++ 项目时:

警告:项目必须安装 nuget 包 Microsoft.Bcl, 版本=1.1.10。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=317570.

但不让我安装,因为它不是原生 C#。

【问题讨论】:

【参考方案1】:

google .net 客户端库支持.net framework 4.5+

虽然我们尝试支持 4.0,但并非一切都能正常工作,而且我已经有一段时间没有尝试过了。我建议尝试回到 1.12 左右的旧版本库,我认为应该支持 4.0

从这里开始https://www.nuget.org/packages/Google.Apis.Calendar.v3/1.12.0.472 并逐步提高,看看是否能找到它停止工作的版本。

【讨论】:

我试图回到版本 1.9.2.1480 并且警告仍然出现。另一个问题(不知道是否相关)是当我编译引用 C# 的 C++ 项目时,它给了我警告:项目必须安装 nuget 包 Microsoft.Bcl,版本 = 1.1.10。有关详细信息,请参阅go.microsoft.com/fwlink/?LinkID=317570。但不会让我安装,因为它不是原生 C#。 我认为您需要拥有正确版本的 nuget 才能安装它。 TBH 我不知道你可以在 C++ 中使用 C# 包。 我不完全确定我应该在我的 C++ 项目中安装 BCL 包,但警告引导我这样做。不让我安装 Microsoft.Bcl 的问题似乎与不是 .NET 项目有关,错误显示:无法安装包“Microsoft.Bcl 1.1.10”。您正在尝试将此包安装到以“native,Version=v0.0”为目标的项目中,但该包不包含任何与该框架兼容的程序集引用或内容文件。如需更多信息,请联系包作者。

以上是关于编译 C++/CLI DLL 时出现警告的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2010 在编译 C++/CLI 项目时出现奇怪的错误

keil编译C程序时出现了这样的错误,不知道怎么解决?(高分悬赏)

用keil4编译时出现以下警告,一直看不明白啥意思,求帮助

vc运行c程序时出现没有匹配的符号信息?如何处理?

为啥 C++/CLI 编译器不为过时的属性调用生成警告?

在 C++/CLI 中使用 std::basic_ifstream::get() 时出现 AccessViolationException,为啥?