Если вы сравните файлы .csproj
для обоих проектов, вы заметите, что проект ASP.NET Core ссылается на SDK Microsoft.NET.Sdk.Web
, а консольный проект просто ссылается на Microsoft.NET.Sdk
. SDK - это в основном предопределенный набор конфигураций и значений по умолчанию, упрощающих работу с ASP.NET Core или консольными приложениями, а также файл проекта, который легко читать и поддерживать.
Microsoft.NET.Sdk.Web
фактически расширяет Microsoft.NET.Sdk
, поэтому все, что делает последний SDK, также включено в Web SDK. Web SDK просто добавляет еще кое-что, связанное с ASP.NET Core. Это также означает, что веб-приложение - это просто консольное приложение.
Одна из строк, содержащихся в Web SDK: не , включенная в общий SDK , - это :
<Content Include="**\*.json" CopyToPublishDirectory="PreserveNewest" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder);$(DefaultWebContentItemExcludes)" />
Это в основном определяет все .json
файлы как контент, который должен быть скопирован в каталог публикации. Так что в основном это то, что заставляет проекты ASP.NET Core копировать файлы appsettings.json
в каталог публикации.
Поскольку это не является частью обычного SDK проекта, консольные приложения не будут автоматически копировать файлы appsettings.json
в каталог публикации. Обычно это преднамеренно , поскольку необработанные консольные приложения не обязательно построены на системе конфигурации, которая использует эти файлы.
Это возможно (и, вероятно, оно станет более актуальным в будущем с универсальным хостом в 3.0), но не по умолчанию. Поэтому, если вы хотите скопировать файлы в каталог публикации, вам следует добавить это правило самостоятельно в ваш .csproj
:
<ItemGroup>
<Content Include="*.json" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>
Btw. так как вы упомянули в комментариях, что ASP.NET Core на самом деле не требует appsettings.json
самих файлов (что абсолютно верно), Web SDK предоставляет два свойства EnableDefaultItems
и EnableDefaultContentItems
для отключения это поведение по умолчанию (наряду с некоторыми другими).