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

.NET 8发布后从dependencies文件夹加载依赖的解决方案

解决方案:将.NET 8项目依赖发布到指定文件夹并配置加载路径

方案1:通过项目文件(.csproj)直接配置

这是最直接的方案,无需编写额外代码,直接修改项目配置即可实现依赖输出到dependencies/并让运行时自动加载:

  1. 修改项目的.csproj文件,添加以下配置:
<PropertyGroup>
  <!-- 启用本地复制锁定文件程序集 -->
  <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
  <!-- 指定依赖输出到dependencies文件夹 -->
  <RuntimeDependenciesOutputPath>dependencies</RuntimeDependenciesOutputPath>
  <!-- 自动生成runtime配置文件 -->
  <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
</PropertyGroup>

<!-- 确保所有NuGet包都复制到指定目录 -->
<ItemGroup>
  <PackageReference Update="*" CopyLocal="true" />
  <!-- 告诉运行时去dependencies目录探测依赖 -->
  <RuntimeHostConfigurationOption Include="PROBING_PATH" Value="dependencies" />
</ItemGroup>
  1. 执行发布命令:
dotnet publish -c Release -o ./publish

发布完成后,publish目录下会生成根目录的可执行文件,以及dependencies/文件夹(包含所有NuGet依赖的.dll文件),运行时会自动从该文件夹加载依赖。


方案2:手动修改运行时配置文件

如果不想修改项目文件,也可以通过发布后修改runtimeconfig.json实现:

  1. 执行带参数的发布命令,指定依赖输出目录:
dotnet publish -c Release -o ./publish /p:RuntimeDependenciesOutputPath=dependencies /p:CopyLocalLockFileAssemblies=true
  1. 打开publish目录下的<你的项目名>.runtimeconfig.json,在runtimeOptions.configProperties中添加探测路径配置:
{
  "runtimeOptions": {
    "tfm": "net8.0",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "8.0.0"
    },
    "configProperties": {
      "PROBING_PATH": "dependencies"
    }
  }
}

为什么AssemblyResolve方案无效?

在.NET 5+(包括.NET 8)中,运行时会在Main方法执行前提前加载必要的依赖程序集(框架依赖、项目引用的NuGet包等),因此即使在Main最顶部注册AssemblyResolve事件,也赶不上初始的依赖加载流程,导致该方案失效。上面的方案都是通过提前配置运行时的探测路径,从根源上解决依赖加载的路径问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:21:03