Я, очевидно, решил проблему, с которой столкнулся, но, похоже, это не «правильный» способ сделать это. Чего мне не хватает?
Вы можете получить некоторую помощь от этого блога , project.assets.json перечисляет все зависимости проекта.
Когда вы создаете новый проект .net core
в VS, он создаст этот файл для вас. Откройте его с помощью блокнота, и вы можете обнаружить, что он не определяет время выполнения по умолчанию:
Когда вы пытаетесь построить его с помощью командной строки msbuild с/p:Runtimeidentifier=win-x64
, тогда msbuild не может распознать эту среду выполнения, поскольку она не определена в файле projects.assets.json
.
Простой способ обойти эту проблему - добавить переключатель -restore
, когда вы указываете команду сRuntimeidentifier=xxx
.
Так что на самом деле вам нужно передать следующие параметры в msbuild, нет необходимости вручную редактировать файл xx.csproj
:
/p:TargetFramework=xxx /p:Runtimeidentifier=xxx /restore
Msbuild выполнит цель restore
перед выполнением цели build
, цель restore
создаст новый файл projects.assets.json
для win-64, см .:
Решение :
Таким образом, правильный способ - добавить ключ restore
в вашу команду сборки, тогда сборка будет успешной независимо от того, на какой Runtimeidentifier
вы хотите нацелиться. Избегайте ручного редактирования Runtimeidentifier
в файле проекта!
Что касается того, почему он работает в VS: VS выполнит восстановление автоматически за нас, когда мы используем функцию публикации (щелкните правой кнопкой мыши проект => Опубликовать). Мы можем легко найти projects.assets.json для win-64 по пути ProjectFolder\obj\publish\win-x64
, поэтому он успешно выполняется при публикации из VS. Хм, это прелесть IDE, верно?