VS2019下nopCommerce4.40(.NET5)插件构建排除runtimes且保留Nuget包问题
针对nopCommerce 4.40.4插件Nuget包输出问题的解决方案
方案1:开启全局拷贝后裁剪冗余文件
该方案适合插件依赖多个Nuget包的场景:
- 先将
CopyLocalLockFileAssemblies设置为true - 在
<PropertyGroup>节点中添加以下配置,过滤冗余资源:
<!-- 仅保留需要的语言,可自行增减,大幅减少多语言资源体积 --> <SatelliteResourceLanguages>zh-Hans;en</SatelliteResourceLanguages> <!-- 禁用不必要的运行时资产拷贝 --> <EnableRuntimePackAssets>false</EnableRuntimePackAssets>
- 在现有
NopTarget构建后任务中添加删除runtimes文件夹的逻辑(你的短信包不需要跨平台运行时文件):
<Target Name="NopTarget" AfterTargets="Build"> <!-- 删除插件路径下的不必要库 --> <MSBuild Projects="@(ClearPluginAssemblies)" Properties="PluginPath=$(MSBuildProjectDirectory)\$(OutDir)" Targets="NopClear" /> <!-- 新增:删除冗余runtimes文件夹 --> <Delete Files="$(OutDir)\runtimes\**\*" ContinueOnError="true" /> <RemoveDir Directories="$(OutDir)\runtimes" ContinueOnError="true" /> </Target>
方案2:关闭全局拷贝,单独指定需要输出的Nuget包(更推荐)
该方案适合仅依赖少量Nuget包的场景,从根源避免冗余文件生成:
- 保持
CopyLocalLockFileAssemblies为false不变 - 修改
SmsIrRestful.NetCore的包引用配置,强制单独输出该包的dll:
<PackageReference Include="SmsIrRestful.NetCore" Version="1.1.5"> <Private>True</Private> <ExcludeAssets>runtime</ExcludeAssets> </PackageReference>
说明:
Private=True会强制该Nuget包的主dll输出到构建目录,ExcludeAssets="runtime"会禁止拷贝该包关联的运行时文件,不会生成runtimes文件夹。
注意事项
你当前对Nop.Services设置<Private>false</Private>的配置是符合nop官方规范的,不会影响功能,无需修改。
内容的提问来源于stack exchange,提问作者Sepehr Estaki
相关产品推荐
相关产品推荐

