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

切换TargetFramework至net6.0后引用本地DLL引发文件未找到异常

问题原因分析

.NET Framework和.NET 6(属于.NET Core系列)的程序集引用与依赖处理机制存在本质差异:

  • 在.NET Framework中,直接引用本地DLL时,构建系统会自动解析该DLL的所有依赖项(包括其引用的NuGet包),并将这些依赖复制到输出目录,这就是你之前能正常运行的原因。
  • 而在.NET 6+中,本地文件引用(<Reference>)属于**“裸引用”**,构建系统不会自动解析或复制该DLL的依赖项。它默认只处理项目引用(<ProjectReference>)和NuGet包引用的传递依赖,因此ProjectA的输出目录里只会有ProjectB.dll本身,缺少其依赖的NuGet包DLL,导致运行时抛出文件未找到异常。
解决方案

1. 最佳实践:改用项目引用

如果两个项目属于同一解决方案(或可以添加到同一解决方案),直接替换本地DLL引用为项目引用,这是.NET Core+推荐的引用方式,能自动处理所有传递依赖:
修改ProjectA的csproj中的引用部分:

<ItemGroup>
  <ProjectReference Include="..\..\SolutionB\ProjectB\ProjectB.csproj" />
</ItemGroup>

这样构建时,ProjectA会自动构建ProjectB(如果未构建),并将ProjectB及其所有依赖的NuGet包DLL复制到自己的输出目录,完全复刻.NET Framework时期的效果。

2. 若必须使用本地DLL引用的替代方案

如果无法使用项目引用,有两种方式解决依赖问题:

  • 显式引用依赖的NuGet包:在ProjectA的csproj中,添加ProjectB所依赖的所有NuGet包引用,这样构建时这些包的DLL会被复制到输出目录。
  • 手动复制依赖项:在ProjectA的csproj中添加自定义构建任务,将ProjectB输出目录中的所有依赖DLL复制到ProjectA的输出目录。示例:
<Target Name="CopyProjectBDependencies" AfterTargets="Build">
  <Copy SourceFiles="..\..\SolutionB\ProjectB\bin\Release\net6.0\*.dll" DestinationFolder="$(OutputPath)" SkipUnchangedFiles="true" />
</Target>

注意:这种方式需要确保ProjectB的输出目录包含所有依赖DLL,且路径正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:15:34