.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": {}
}
},
,因此compile
和runtime
部分中都存在相同的软件包,而nuget软件包本身并不表示应仅在compile部分中使用程序集。
我需要生成此deps.json文件,我只想了解如何确定compileOnly
。