.NET Core 6:如何让传统程序集引用写入顶层App.deps.json?
.NET Core 6中传统程序集依赖无法传递到顶层.deps.json的问题
背景
.NET Core中,.deps.json文件控制程序集加载——如果依赖项不在顶层应用的.deps.json中,除非处理AssemblyResolve事件等操作,否则不会被加载。
场景说明
- .NET Core 6环境
- 类库程序集:ClassLib
- 控制台应用(App.exe):通过项目引用依赖ClassLib
当ClassLib使用NuGet包(如Newtonsoft.Json)时,该依赖会正常出现在App生成的App.deps.json中,运行正常。但ClassLib引用的非NuGet形式的遗留程序集(通过<Reference>节点添加),不会被传递到App的App.deps.json中,导致运行时无法加载这些遗留程序集,引发异常。
项目配置详情
ClassLib.csproj
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="13.0.2" /> </ItemGroup> <ItemGroup> <Reference Include="Legacy"> <HintPath>..\path\to\Legacy.dll</HintPath> <SpecificVersion>True</SpecificVersion> </Reference> </ItemGroup> </Project>
App.csproj
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <ProjectReference Include="..\ClassLib\ClassLib.csproj" /> </ItemGroup> </Project>
生成的App.deps.json问题
生成的App.deps.json中仅包含ClassLib对NuGet包的依赖,未包含Legacy.dll:
"ClassLib/1.0.0": { "dependencies": { "Newtonsoft.Json": "13.0.2" }, "runtime": { "ClassLib.dll": {} } }
已尝试调整<Reference>节点的CopyLocal/Private等配置,均未改变App.deps.json的生成结果。
问题咨询
- 是否能让构建系统像处理NuGet包引用一样处理传统程序集引用,将依赖传递到顶层项目?
- 若无法实现,能否自定义构建流程,在构建时将依赖注入到
.deps.json文件中? - 难道只能选择打包NuGet包或处理
AssemblyResolve事件?
内容的提问来源于Stack Exchange,提问作者RobinG
相关产品推荐
相关产品推荐

