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

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中添加如下配置:
    <PropertyGroup>
      <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
      <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);IncludeAllLocalAssets</TargetsForTfmSpecificBuildOutput>
    </PropertyGroup>
    <Target Name="IncludeAllLocalAssets" DependsOnTargets="ResolveLockFileAssets">
      <ItemGroup>
        <TfmSpecificBuildOutput Include="@(ReferenceCopyLocalPaths)" />
      </ItemGroup>
    </Target>
    
    该配置会把所有标记为复制本地的程序集全部放到nupkg的lib目录下,下游项目引用时会直接把所有程序集复制到输出。
  • 方案3:下游项目配置(不需要修改原有Nuget包)
    如果不方便重新打包自制Nuget包,可以在所有引用该包的项目csproj中添加如下配置:
    <PropertyGroup>
      <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
      <RestoreTransitiveDependencies>true</RestoreTransitiveDependencies>
    </PropertyGroup>
    
    该配置会让下游项目在还原时主动拉取所有传递依赖,并全部复制到生成输出目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:30:04