VS2019+.Net5环境下Nuget包依赖未复制到输出目录如何解决
解决方案
CopyLocalLockFileAssemblies属性仅作用于当前项目的本地生成输出,不会改变Nuget打包时的依赖声明逻辑,所以你打包出来的nupkg包的nuspec清单没有声明完整的传递依赖,下游项目引用时自然不会下载和复制对应的程序集,可通过以下几个方案解决:
- 方案1:调整打包项目的依赖声明属性
在你制作Nuget包的项目csproj文件中,找到对Microsoft.Extensions.Hosting.WindowsServices的PackageReference节点,修改属性如下:
将<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="你的版本号"> <PrivateAssets>none</PrivateAssets> <IncludeAssets>all</IncludeAssets> </PackageReference>PrivateAssets设为none即可让该包的所有传递依赖被标记为需要传递到下游项目,打包时会自动把这些依赖写入nupkg的nuspec依赖清单中,下游项目引用时会自动拉取所有关联依赖并复制到输出目录。 - 方案2:强制打包时包含所有复制本地的程序集
如果需要直接把所有依赖程序集都嵌入到你自制的Nuget包中(不需要下游项目单独拉取依赖),可以在打包项目的csproj中添加如下配置:
该配置会把所有标记为复制本地的程序集全部放到nupkg的lib目录下,下游项目引用时会直接把所有程序集复制到输出。<PropertyGroup> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);IncludeAllLocalAssets</TargetsForTfmSpecificBuildOutput> </PropertyGroup> <Target Name="IncludeAllLocalAssets" DependsOnTargets="ResolveLockFileAssets"> <ItemGroup> <TfmSpecificBuildOutput Include="@(ReferenceCopyLocalPaths)" /> </ItemGroup> </Target> - 方案3:下游项目配置(不需要修改原有Nuget包)
如果不方便重新打包自制Nuget包,可以在所有引用该包的项目csproj中添加如下配置:
该配置会让下游项目在还原时主动拉取所有传递依赖,并全部复制到生成输出目录。<PropertyGroup> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <RestoreTransitiveDependencies>true</RestoreTransitiveDependencies> </PropertyGroup>
内容的提问来源于stack exchange,提问作者Freak78
相关产品推荐
相关产品推荐

