You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建NuGet包时,能否用通配符批量包含*.resource.dll及所有资源文件?

当然可以!完全不用一个个手动指定所有资源文件,NuGet支持通配符来批量包含这些文件,能省超多时间,尤其是当你有大量区域性资源(比如各种语言的*.resource.dll)的时候。

用通配符在.nuspec中批量包含资源文件

1. 基础通配符写法

在你的.nuspec文件的<files>节点里,只需要简单的通配符就能匹配所有目标文件。举个例子,如果你的资源文件都输出在bin\Release\net6.0目录及子文件夹中(比如各语言的zh-CN、en-US文件夹里的*.resource.dll),可以这么配置:

<files>
  <!-- 递归匹配所有子目录下的*.resource.dll文件 -->
  <file src="bin\Release\net6.0\**\*.resource.dll" target="lib\net6.0\**" />
  <!-- 如果还有.resx等其他资源文件,也可以用同样方式批量包含 -->
  <file src="bin\Release\net6.0\**\*.resx" target="lib\net6.0\**" />
</files>

这里的**是递归通配符,会匹配所有嵌套层级的子目录;*则用来匹配文件名中的任意字符(不含目录分隔符),完美覆盖所有资源文件。

2. 保留区域性资源的目录结构

通常*.resource.dll作为区域性附属程序集,会存放在对应语言代码的子文件夹里。上面的配置中target="lib\net6.0\**"会原样保留源文件的目录结构,这样当用户安装你的NuGet包时,这些资源文件会被自动部署到项目的对应语言目录下,保证功能正常。

3. 几个小提醒

  • 要确认src路径是相对于.nuspec文件所在位置的,路径写错会导致匹配不到文件哦。
  • 如果你的项目是SDK风格(比如.NET Core/.NET 5及以上版本),其实也可以不用手动编写.nuspec,直接在.csproj文件里配置批量打包:
<ItemGroup>
  <None Include="bin\Release\net6.0\**\*.resource.dll" Pack="true" PackagePath="lib\net6.0\**" />
</ItemGroup>

不过如果习惯用.nuspec管理包内容,还是第一种方法最直接。

内容的提问来源于stack exchange,提问作者Masterlud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:26:56