Ily*_*dik 5 .net .net-core asp.net-core dotnet-publish
我正在dotnet publish
ASP.Net 项目和控制台项目上运行(通过 VS2019 GUI 或命令,相同的结果)。
看来行为有所不同。所有内容appsettings*.json
都会在 ASP.Net 中自动复制,但只有当我将它们设置为<CopyToOutputDirectory>Always</CopyToOutputDirectory>
.
这是某种错误还是它真的被设计为根据项目类型而有所不同?
这种行为对我来说看起来有点奇怪。
如果比较.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 应用程序只是控制台应用程序。
Web SDK 包含但未包含在通用 SDK 中的行之一如下:
\n\n<Content Include="**\\*.json" CopyToPublishDirectory="PreserveNewest" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder);$(DefaultWebContentItemExcludes)" />\n
Run Code Online (Sandbox Code Playgroud)\n\n这基本上将所有.json
文件定义为应复制到发布目录的内容。所以基本上这正是 ASP.NET Core 项目将appsettings.json
文件复制到发布目录的原因。
由于这不是正常项目 SDK 的一部分,因此控制台应用程序不会自动将appsettings.json
文件复制到发布目录。这通常是故意的,因为原始控制台应用程序不一定构建在使用这些文件的配置系统上。
这是可能的(并且将来可能与 3.0 中的通用主机更加相关),但不是默认值。因此,如果您想将文件复制到发布目录,那么您应该将该规则自己添加到您的.csproj
:
<ItemGroup>\n <Content Include="*.json" CopyToPublishDirectory="PreserveNewest" />\n</ItemGroup>\n
Run Code Online (Sandbox Code Playgroud)\n\n顺便提一句。由于您在评论中提到 ASP.NET Core 并不真正需要 appsettings.json
文件本身(这是绝对正确的),因此 Web SDK 确实公开了两个属性EnableDefaultItems
并EnableDefaultContentItems
禁用此默认行为(以及其他一些行为)。
归档时间: |
|
查看次数: |
1388 次 |
最近记录: |