如何在 NuGet 包中正确包含 rd.xml 文件?

How to properly include an rd.xml file in a NuGet package?

我正在开发一个大量使用反射的库,并且同时针对 .NET Core (netstandard1.3) 和完整的 .NET (net451)。

要使其与 .NET Native(即 UWP 发布版本)一起使用,它需要一个 rd.xml 文件,如下所示:

<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
  <Library Name="MyLibrary">
    <!-- bunch of directives here -->
  </Library>
</Directives>

我知道这些指令有效,因为将它们插入到使用库的 UWP 应用程序的 Application.rd.xml 文件中工作正常,但应用程序会因为缺少元数据而崩溃。

使用 this blog post,我尝试通过将 uap10.0 添加到受支持的框架来使我的库兼容,使用与 netstandard1.3 + System.Runtime 相同的依赖项,然后添加关注我的 project.jsonpackOptions:

"files": {
  "include": "Properties/MyLibrary.rd.xml",

  "mappings": {
    "lib/uap10.0/MyLibrary/Properties/MyLibrary.rd.xml": "Properties/MyLibrary.rd.xml"
  }
}

dotnet pack -c Release 生成的包确实在预期位置包含 MyLibrary.rd.xml 文件。

但是,当我在 UWP 应用程序中使用该包(来自 NuGet,而不是作为项目引用)时,.NET Native 不会获取 .rd.xml 文件;应用因缺少元数据错误而崩溃。

我错过了什么?

Matt Whilden 的评论让我走上了正确的道路;基于 .xproj 的项目没有文件属性,但 Embedded Resource 的正确等效项是框架部分中的 buildOptions/embed,而不是 packOptions/files:

"uap10.0": {
  "buildOptions": {
    "embed": {
      "include": "Properties/MyLibrary.rd.xml"
    }
  }
}