dotnet new模板打包时如何包含.editorconfig等隐藏点文件?
解决方案
核心原因
.NET SDK 执行dotnet pack时默认会自动排除所有以.开头的隐藏文件,该规则优先级高于普通的Content Include声明,因此单独添加的点文件包含配置不会生效。
修复步骤
- 在csproj文件的第一个PropertyGroup节点中添加
<NoDefaultExcludes>true</NoDefaultExcludes>配置,关闭默认的隐藏文件排除规则即可。 - 原有ItemGroup的Content配置已经通配了templates目录下的所有文件,不需要重复单独声明两个点文件的包含规则。
修改后的完整csproj示例:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <PackageType>Template</PackageType> <TargetFramework>net6.0</TargetFramework> <IncludeContentInPack>true</IncludeContentInPack> <IncludeBuildOutput>false</IncludeBuildOutput> <ContentTargetFolders>content</ContentTargetFolders> <!-- 关闭默认隐藏文件排除规则 --> <NoDefaultExcludes>true</NoDefaultExcludes> </PropertyGroup> <PropertyGroup> <Description>dotnet new templates</Description> <PackageTags>template dotnet console</PackageTags> <Version>1.0.0</Version> </PropertyGroup> <ItemGroup> <Compile Remove="**\*" /> <Content Include="templates\**\*" Exclude="templates\**\bin\**;templates\**\obj\**;templates\**\.vs\**" /> </ItemGroup> </Project>
额外模板配置校验
如果打包成功后,使用模板创建项目时仍然没有生成这两个文件,需要检查模板根目录下.template.config/template.json的配置,确保sources节点的排除规则没有包含点文件,参考配置如下:
{ "sources": [ { "modifiers": [ { "exclude": [ "**/bin/**", "**/obj/**", "**/.vs/**", ".template.config/**" ] } ] } ] }
打包结果验证
执行dotnet pack后,将生成的.nupkg文件后缀改为.zip解压,检查content目录下对应路径是否存在.editorconfig和.gitignore文件,即可确认打包是否成功。
内容的提问来源于stack exchange,提问作者TGlatzer
相关产品推荐
相关产品推荐

