.net-core如何为deps.json文件生成compileOnly属性

时间:2018-12-15 14:08:31

标签: asp.net-core msbuild .net-core

.Net Core使用deps json文件来了解将运行的应用程序的依赖性。像SomeProject.deps.json。据我了解,该文件基本上已映射到DependencyContext.cs。然后同一程序集Microsoft.Extensions.DependencyModel具有DependencyContextWriter,它将模型记录为json文件。

还有GenerateDepsFile.cs是MSBuild任务,由dotnet CLI执行,该命令启动运行该任务的msbuild来生成该文件。它使用由NuGet restore生成的锁定文件project.assets.json作为输入数据,然后将在构建\发布过程中生成实际的deps.json文件

当我创建ASP.Net Core项目时,在deps文件中看到了这样的块。这是最简单的例子

"targets":{

...

      "Microsoft.AspNetCore.DataProtection.Abstractions/2.1.1": {
        "compile": {
          "lib/netstandard2.0/Microsoft.AspNetCore.DataProtection.Abstractions.dll": {}
        },
        "compileOnly": true
      },
...
}

actual package仅在lib\netstandard2.0\Microsoft.AspNetCore.DataProtection.Abstractions.dll内部具有该程序集。

我的问题是,dotnet cli和msbuild如何理解该程序集是compileOnly,因为我在RuntimeLibrary类中没有看到compileOnly属性。而且我在sdk repo中找不到任何compileOnly逻辑。 当我由RestoreRunner.RunAsync生成project.assets.json时,编译和运行时部分都使用相同的程序集:

"Microsoft.AspNetCore.DataProtection.Abstractions/2.1.1": {
    "type": "package",
    "compile": {
      "lib/netstandard2.0/Microsoft.AspNetCore.DataProtection.Abstractions.dll": {}
    },
    "runtime": {
      "lib/netstandard2.0/Microsoft.AspNetCore.DataProtection.Abstractions.dll": {}
    }
},

,因此compileruntime部分中都存在相同的软件包,而nuget软件包本身并不表示应仅在compile部分中使用程序集。

我需要生成此deps.json文件,我只想了解如何确定compileOnly

0 个答案:

没有答案