VS2019构建时多级引用的nuget程序集未复制到应用输出目录问题
问题答复
是的,不需要在应用项目C中直接引用程序集A,通过以下配置即可实现自动将A输出到C的构建目录:
方案1:修改程序集B的NuGet引用配置(适用于PackageReference引用格式)
该问题的核心原因是默认NuGet引用的PrivateAssets属性会截断运行时依赖的传递链,操作步骤如下:
- 右键点击程序集B项目,选择「编辑项目文件」
- 找到程序集A对应的
PackageReference节点,默认配置类似如下:<PackageReference Include="程序集A的包名" Version="x.x.x"> <PrivateAssets>contentfiles;analyzers;build</PrivateAssets> </PackageReference> - 要么直接删除
<PrivateAssets>这一行,要么将其值修改为none:<PackageReference Include="程序集A的包名" Version="x.x.x" PrivateAssets="none" /> - 重新构建整个解决方案即可,程序集A会自动随B的依赖传递到C的输出目录。
方案2:全局开启程序集B的依赖复制(适用于所有SDK风格项目)
如果不想单独修改单个包的配置,可以直接强制让B的所有依赖都参与传递复制:
- 编辑程序集B的项目文件,在第一个
<PropertyGroup>节点中添加如下配置:<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> - 重新构建解决方案即可生效,该配置会让B的所有NuGet/项目依赖都默认复制到输出目录,同时自动传递给上游引用项目C。
方案3:适配packages.config引用格式
如果你的项目仍在使用旧版的packages.config管理NuGet包,操作如下:
- 在程序集B的引用列表中找到程序集A,右键点击选择「属性」
- 将属性中的「复制本地」选项设置为
True - 确保应用C对程序集B的引用的「复制本地」属性也为
True,重新构建即可。
内容的提问来源于stack exchange,提问作者Warr
相关产品推荐
相关产品推荐

