生成 C++/CLI 可执行文件时警告 C4691:忽略还是修复?

Mal*_*chi 7 c# c++-cli .net-core

使用 NuGet 中的程序集时,我几乎肯定会遇到此警告。

我们的代码库是关键任务。这些警告是否会对我们的代码稳定性和性能构成威胁?如果是这样,我该如何修复警告条件,使不稳定不再成为问题?

警告显示如下:

>c:\projects\ucpro\application\ucpront\logging.h(33): warning C4691: 'System::Exception': type referenced was expected in unreferenced assembly 'System.Runtime', type defined in current translation unit used instead
>c:\projects\ucpro\application\ucpront\logging.h(33): note: This diagnostic occurred while importing type 'Microsoft::Extensions::Logging::ILogger ' from assembly 'Microsoft.Extensions.Logging.Abstractions, Version=1.1.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.
>c:\projects\ucpro\application\ucpront\logging.h(33): warning C4691: 'System::Func': type referenced was expected in unreferenced assembly 'System.Runtime', type defined in current translation unit used instead
>c:\projects\ucpro\application\ucpront\logging.h(33): note: This diagnostic occurred while importing type 'Microsoft::Extensions::Logging::ILogger ' from assembly 'Microsoft.Extensions.Logging.Abstractions, Version=1.1.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.
Run Code Online (Sandbox Code Playgroud)

一个简单的例子是尝试使用 Microsoft.Extensions.Logger 时。可以轻松地通过此项目重现该问题

似乎是必要的,我通过一个本身也面向 .NET 4.6 的 shim 库来提取 NuGet,然后直接指向 net46 文件夹以提取 Microsoft.Extensions.*.dll 。

这些警告看起来像是从 netstandard 到 .NET Framework 的程序集重定向的工件

Mal*_*chi 6

在与微软发生事件之后,这是半规范的答案。半规范因为

  • 这是对一段长对话的解释
  • 我的笔记不在这里,所以我无法仔细检查每个细节。

答案:在项目引用的程序集是mscorlib但实际上引用类正在程序集System.Runtime中查找引用的类的情况下,可以安全地忽略这些警告,因为System.Runtime(很大程度上)是 netstandard,就像mscorlib是 netstandard 一样。 .NET框架。

我自己的观察 - 并不是专门来自我的事件收集:在更正常的(非 C++/CLI)条件下,编译器可能会使用 shim 库来消除此错误,并且显然也会执行少量的适配器模式操作

  • 该警告并不完全是善意的。它不允许您调试 netstandard 库中定义的类型。查看我的问题/sf/ask/3916279671/ (2认同)