如何用dotnet pack仅打包资源文件创建NuGet语言包?
解决方案:用dotnet pack构建独立多语言资源NuGet包
方案1:配置独立资源项目,避免生成多余DLL
创建对应语言的资源项目(如lib.de.csproj),通过修改项目配置,让它仅打包资源文件,不生成冗余的语言专属DLL:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <!-- 与主库目标框架保持一致 --> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> <OutputType>None</OutputType> <!-- 核心配置:不生成库或可执行文件 --> <PackageId>YourMainLib.de</PackageId> <!-- 多语言包ID格式:主库ID+语言后缀 --> <PackageVersion>1.0.0</PackageVersion> <Title>YourMainLib 德语资源包</Title> <Description>YourMainLib的德语语言资源</Description> </PropertyGroup> <ItemGroup> <EmbeddedResource Include="**\*.resx" /> <!-- 指定资源逻辑名称,确保主库能正确加载 --> <EmbeddedResource Update="Resources\YourMainLib.de.resx"> <LogicalName>YourMainLib.Properties.Resources.de.resources</LogicalName> <ManifestResourceName>YourMainLib.Properties.Resources.de</ManifestResourceName> </EmbeddedResource> </ItemGroup> <!-- 跳过编译步骤,直接打包资源 --> <PropertyGroup> <NoBuild>true</NoBuild> </PropertyGroup> </Project>
执行打包命令:
dotnet pack lib.de.csproj --configuration Release
此方案生成的包仅包含资源文件,无冗余DLL,且资源命名符合主库加载逻辑。
方案2:主项目多配置打包,排除主DLL
若不想新建独立项目,可在主库csproj中添加多语言构建配置,打包时仅输出对应语言的资源:
<!-- 在主库csproj中添加德语配置 --> <PropertyGroup Condition="'$(Configuration)' == 'Release-de'"> <NeutralLanguage>de</NeutralLanguage> <PackageId>YourMainLib.de</PackageId> <PackageVersion>1.0.0</PackageVersion> <GeneratePackageOnBuild>false</GeneratePackageOnBuild> </PropertyGroup> <ItemGroup Condition="'$(Configuration)' == 'Release-de'"> <!-- 仅包含德语资源文件 --> <EmbeddedResource Include="Resources\YourMainLib.de.resx" /> <!-- 排除所有代码文件,避免生成主库DLL --> <Compile Remove="**\*.cs" /> </ItemGroup>
执行打包命令:
dotnet pack YourMainLib.csproj --configuration Release-de
此方案无需额外项目,通过配置隔离不同语言的打包内容,但需维护多套构建配置。
方案3:复用现有nuspec文件,用dotnet pack打包
dotnet pack支持直接调用nuspec文件,可完全复用你之前的nuspec配置,无需修改项目文件,完美替代nuget.exe:
执行打包命令:
dotnet pack --nuspec-file YourMainLib.de.nuspec --configuration Release
此方案迁移成本最低,直接沿用原有多语言打包逻辑,且跨平台无需依赖mono。
内容的提问来源于stack exchange,提问作者gregsdennis
相关产品推荐
相关产品推荐

