我可以通过编程方式控制.NET Core程序集重定向吗?

Kat*_*lus 7 .net c# .net-core

问题: .NET Core 2.0(netstandard 2.0)中是否有任何方法可以application.exe.config在运行可执行文件时应用未在给定文件中定义的程序集重定向?也许是一些程序化的方式?或者甚至通过一些特殊设置/标志运行可执行文件?

场景: 这是我试图在.NET Core 2.0中解决的简化场景.

  1. 有一个"服务托管"可执行文件,让我们称之为 ServiceHost.exe
  2. 有一个服务.dll,让我们调用它 Service.dll,它实现了一些IService带方法的入口接口Start().
  3. 当我运行ServiceHost.exe --service-assembly Service.dll它时加载服务并调用其IService.Start()实现.
  4. 该服务的作者可以是任何人,它独立于服务主机.

假设该服务需要一些程序集重定向.在.NET Core世界中,当您引用比旧.NET Framework更多的软件包并且并非所有软件包都具有最新.NET Core的确切版本时,这种情况非常普遍.使用程序集重定向可以很好地工作,并允许您使用旧版本的库目标就好了.

这就是我的设置问题.由于Service.dll是一个由独立可执行app.config文件加载的库,因此不使用其带有程序集重定向的文件.运行时使用ServiceHost.exe.config与否Service.dll.config,这是预期的.

提醒:我正在使用.NET Core这样的解决方案,创建新的Application Domain并将其设置为加载不同的配置文件不是一个选项.

Reb*_*cca 1

我们使用面向 NetFramework 的 NetCore 服务主机,您可以使用自动绑定重定向:

<PropertyGroup>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

然后,这会在 Servicehost.exe.config 中自动生成绑定重定向

  • 它在构建应用程序时生成重定向。我的场景是运行时,当 .exe 已经存在并且需要加载任意 .dll 时。 (4认同)