我可以将本机依赖项放在子文件夹中吗

Can i place native dependencies in a subfolder

当我发布一个 dotnet 核心项目时,它生成了一个文件夹,其中包含数百个框架和本机 运行time 文件。

我知道这些文件是使一切正常工作所必需的,但是我可以将它们移到子文件夹中,同时仍然让我的应用程序进入 运行 吗?

例如

MYAppFolder\
    MyApp.exe
    MyApp.exe.config
    native\
       hostfxr.dll
       netstandard.dll
       ...

是否有某种探测路径配置可以做到这一点?

据我所知,您有一个 Standalone (SCD) 应用程序。

对于这种类型的部署,hostfxr.dll 按照惯例应该始终存在于应用程序目录中。

至于其他部门,您可以将它们移动到任何位置,但是您需要为每个构建编辑 [AppName].deps.json 并指定 其他探测路径.此外,如果您确定不使用它们,您可以自由删除所有冗余依赖项(来自 deps.json 和文件本身)。

检查 this demo 我将 Standalone 应用程序的所有依赖项都可以移动到其他位置的 lib 子目录。

请注意以下事项:

  • 附加探测路径在HelloWorld.runtimeconfig.json中设置,但您也可以使用--additionalprobingpath [path]参数或环境变量
  • 我已经删除了 deps.json 文件中的相对路径,否则我会把文件放到那些相对路径的子目录中 - Additional probing path 被认为是a NuGet package cache 因此里面有一个包布局。

此外,考虑使用 Portable (FDD) 类型。您将拥有更少的空间和更多的文件安排灵活性。