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

时间:2016-09-25 12:48:24

标签: .net nuget .net-core .net-native

我正在开发一个大量使用反射的库,并且目标是.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.json的{​​{1}}:

packOptions

"files": { "include": "Properties/MyLibrary.rd.xml", "mappings": { "lib/uap10.0/MyLibrary/Properties/MyLibrary.rd.xml": "Properties/MyLibrary.rd.xml" } } 生成的包确实包含预期位置的dotnet pack -c Release文件。

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

我错过了什么?

1 个答案:

答案 0 :(得分:1)

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

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