Как .net-core генерирует свойство compileOnly для файла deps.json - PullRequest
0 голосов
/ 15 декабря 2018

.Net Core использует файл deps json , чтобы понять зависимости приложения, которое оно будет запускать.Как SomeProject.deps.json.Насколько я понимаю, этот файл в основном сопоставлен с DependencyContext.cs .И тогда эта же сборка Microsoft.Extensions.DependencyModel имеет DependencyContextWriter, которая запишет модель в файл json.

Существует также GenerateDepsFile.cs , который является задачей MSBuild и выполняется CLI dotnet, который запускает msbuild, который запускает эту задачу для генерации этого файла.Он использует файл блокировки project.assets.json, сгенерированный восстановлением NuGet, в качестве входных данных, а затем сгенерирует фактический файл 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
      },
...
}

А фактическая упаковка содержит только эту сборку внутри lib\netstandard2.0\Microsoft.AspNetCore.DataProtection.Abstractions.dll.

Мой вопрос в том, как dotnet cli и msbuild понимают, что эта сборка compileOnly, поскольку я не вижу свойства compileOnly в RuntimeLibrary классе.И я не могу найти никакой compileOnly логики в SDK репо .Когда я генерирую project.assets.json с помощью RestoreRunner.RunAsync , одна и та же сборка используется как в разделе компиляции, так и во время выполнения:

"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 не имеют никаких указаний на то, что сборка должна использоваться только в разделе компиляции.

Мне нужно создать этот файл deps.json, и я просто хочу понять, как определяется compileOnly.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...