如何在加载C# .NET 6.0 DLL时一并加载其依赖引用?
解决.NET 6控制台项目中DLL依赖自动加载的问题
优先用项目引用代替直接DLL引用
如果你的类库项目和控制台项目在同一个解决方案下,直接添加项目引用是最省心的方式,MSBuild会自动处理依赖传递:
- 右键控制台项目 → 添加 → 项目引用
- 勾选你的类库项目,确认后,类库中所有NuGet依赖(比如
Microsoft.Data.SqlClient)会自动被控制台项目继承,无需手动逐个添加。
修改类库项目的依赖传递配置
如果必须保持类库项目的独立引用(比如不在同一个解决方案),可以修改类库项目的.csproj文件,让NuGet依赖能传递给引用它的项目:
找到类库中对应NuGet包的PackageReference节点,将PrivateAssets设为none(默认是all,会阻止依赖传递):
<PackageReference Include="Microsoft.Data.SqlClient" Version="5.1.1"> <PrivateAssets>none</PrivateAssets> </PackageReference>
这样当控制台项目引用该类库时,对应的NuGet包会自动被引入。
强制复制所有依赖到输出目录
如果是直接引用已编译的DLL文件(而非项目引用),可以在控制台项目的.csproj中添加以下配置,确保所有依赖的程序集都被复制到输出目录:
<PropertyGroup> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> </PropertyGroup>
这个配置会让MSBuild把所有通过锁文件(obj/project.assets.json)追踪到的依赖都复制到输出目录,包括类库间接引用的包。
打包类库为NuGet包(长期方案)
如果这个类库需要被多个项目复用,建议将它打包成NuGet包:
- 在类库项目的
.csproj中配置必要的元数据(如包名、版本) - 执行
dotnet pack生成NuGet包 - 控制台项目直接通过NuGet引用这个包,所有依赖会自动被解析和加载
内容的提问来源于stack exchange,提问作者PreviousDeveloper
相关产品推荐
相关产品推荐

