【问题标题】:Find the origin of MCG0007 compiler warning查找MCG0007编译器警告的出处
【发布时间】:2020-04-11 08:42:14
【问题描述】:

我正在尝试编译一个 uwp 应用程序,但我收到以下错误:

警告 MCG:警告 MCG0007:方法“System.Int32 Microsoft.DotNet.PlatformAbstractions.Native.NativeMethods.Windows.RtlGetVersion(Microsoft.DotNet.PlatformAbstractions.Native.NativeMethods.Windows) 的未解析 P/Invoke 方法“ntdll!RtlGetVersion” .RTL_OSVERSIONINFOEX)'。调用此方法会在运行时抛出异常。请确保 P/Invoke 指向 UWP 应用程序中允许的 Windows API,或作为包一部分的本机 DLL。如果由于某种原因您的 P/Invoke 不满足这些要求,请使用 [DllImport(ExactSpelling=true) 表明您了解使用非 UWP API 的含义。

问题是我找不到来源,有没有办法调试这个问题?或者我怎样才能找到导致问题的库?

更新:我附上了一个引发相同编译错误的示例项目。如果有人可以看看。我将不胜感激。

Sample project

更新 2:我有一个使用以下 nuget 包的 UWP 应用:

此应用使用 3 个 .net 标准库。

UWP 应用包含以下引用。

<PackageReference Include="AdaptiveCards">
      <Version>1.2.4</Version>
    </PackageReference>
    <PackageReference Include="MailKit">
      <Version>2.4.1</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.AppCenter">
      <Version>2.6.4</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.AppCenter.Analytics">
      <Version>2.6.4</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.AppCenter.Crashes">
      <Version>2.6.4</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.Azure.Storage.Blob">
      <Version>11.1.1</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform">
      <Version>6.2.9</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.Services.Store.Engagement">
      <Version>10.1901.28001</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.Toolkit.Uwp">
      <Version>6.0.0</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.Toolkit.Uwp.Notifications">
      <Version>6.0.0</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.Toolkit.Uwp.UI.Animations">
      <Version>6.0.0</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.Toolkit.Uwp.UI.Controls">
      <Version>6.0.0</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.Toolkit.Uwp.UI.Controls.DataGrid">
      <Version>6.0.0</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.UI.Xaml">
      <Version>2.3.191211002</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.Xaml.Behaviors.Uwp.Managed">
      <Version>2.0.1</Version>
    </PackageReference>
    <PackageReference Include="MimeKit">
      <Version>2.4.1</Version>
    </PackageReference>
    <PackageReference Include="MvvmLight">
      <Version>5.4.1.1</Version>
    </PackageReference>
    <PackageReference Include="SQLitePCLRaw.bundle_green">
      <Version>2.0.2</Version>
    </PackageReference>
    <PackageReference Include="SQLitePCLRaw.core">
      <Version>2.0.2</Version>
    </PackageReference>
    <PackageReference Include="Win2D.uwp">
      <Version>1.24.0</Version>
    </PackageReference>

它使用 3 个 .netStandard 库。

服务库

<PackageReference Include="itext7" Version="7.1.9" />
    <PackageReference Include="Microsoft.AppCenter" Version="2.6.4" />
    <PackageReference Include="Microsoft.AppCenter.Analytics" Version="2.6.4" />
    <PackageReference Include="Microsoft.Azure.Storage.Blob" Version="11.1.1" />
    <PackageReference Include="Microsoft.Identity.Client" Version="4.7.1" />
    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
    <PackageReference Include="Portable.BouncyCastle" Version="1.8.5.2" />
    <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.7.0" />
    <PackageReference Include="System.IO.FileSystem" Version="4.3.0" />
    <PackageReference Include="System.IO.FileSystem.AccessControl" Version="4.7.0" />
    <PackageReference Include="System.ServiceModel.Http" Version="4.7.0" />

数据库

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="3.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Analyzers" Version="3.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="3.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
    <PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.0" />
    <PackageReference Include="Z.EntityFramework.Extensions.EFCore" Version="3.0.31" />
    <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="3.0.31" />
    <PackageReference Include="Z.Expressions.Eval" Version="3.0.11" />

签名库

 <PackageReference Include="BouncyCastle.NetCore" Version="1.8.5" />
    <PackageReference Include="System.Security.AccessControl" Version="4.7.0" />
    <PackageReference Include="System.Security.Cryptography.Pkcs" Version="4.7.0" />
    <PackageReference Include="System.Security.Cryptography.Xml" Version="4.7.0" />
    <PackageReference Include="System.Security.Permissions" Version="4.7.0" />
    <PackageReference Include="System.Security.Principal.Windows" Version="4.7.0" />

UWP 引用 ServicesLibrary 和 DataLibrary,ServicesLibrary 引用 SigningLibrary 和 DataLibrary。这就是我试图在发布模式下编译的应用程序的剖析。

非常感谢您的帮助。

【问题讨论】:

  • 请分享你的代码
  • 嗨@Michael,如果它不包含敏感数据,请分享您的代码。我们不能仅根据错误信息定位问题的原因。您是否引入了一个不适用于 UWP 的库? (比如依赖中只支持.NET Framework,不支持.NET Standard),或者使用了一些UWP不支持的特殊功能(UWP有严格的权限管理)
  • 您可以使用ILDASM(SDK 的一部分)转储您的三个库中的每一个,寻找RtlGetVersion
  • @Michael 请edit 将您的minimal reproducible example 包含在 Stack Overflow 上,而不是作为外部链接。
  • @Michael .Net Standard 是一种规范,它提供了一种通用的代码构建方式,可以作为跨平台代码共享的基础。但UWP有自己的特点。例如,您可以通过.Net Standard 中的路径访问该文件,但在 UWP 中不能这样做。 (可以在.Net Standard中获取File对象,但在UWP中推荐StorageFile。),类似的情况还有很多。所以建议在UWP项目中使用Class Library (Universal Windows)

标签: c# uwp .net-native


【解决方案1】:

在所有建议之后,并试图重现编译器错误。我发现 Z.EntityFramework 库是导致问题的原因。查看日志,我发现所有内容都是对 EntityFrameworkCore 的引用,与编译器错误有关。但从那以后,我开始删除库,直到最终找到导致问题的库。

MCG0007: Unresolved P/Invoke这样的神秘消息找到解决方案非常困难,而且有点令人沮丧

感谢您的帮助。

【讨论】:

  • It's very hard and a bit frustrating finding the solution 很好地总结了我们的 UWP 体验 :) :/
猜你喜欢
  • 1970-01-01
  • 2011-05-09
  • 2023-03-03
  • 2017-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多