C# Autofac-按配置从特定文件夹注册程序集

C# Autofac-按配置从特定文件夹注册程序集,c#,autofac,C#,Autofac,我在配置中通过autofac注册我的程序集。 我希望autofac从另一个文件夹加载程序集,而不是“bin”文件夹 我尝试将其放在组合的“type”属性路径中,如下所示: <component type="Amazon.SQS.AmazonSQSClient, amazonDlls/AWSSDK" service="Amazon.SQS.IAmazonSQS, AWSSDK" /> 但我得到了无效程序集名称的错误 我如何做-从特定文件夹注册程序集 顺便说一下:我知道可以从代码中

我在配置中通过autofac注册我的程序集。 我希望autofac从另一个文件夹加载程序集,而不是“bin”文件夹

我尝试将其放在组合的“type”属性路径中,如下所示:

<component type="Amazon.SQS.AmazonSQSClient, amazonDlls/AWSSDK" service="Amazon.SQS.IAmazonSQS, AWSSDK" />

但我得到了无效程序集名称的错误

我如何做-从特定文件夹注册程序集


顺便说一下:我知道可以从代码中找到,但我想从配置中找到。

不可能以完全限定类型名提供程序集的路径。似乎甚至不可能从与“bin”文件夹位于不同目录的库中注册类型。即使您在与dll相同的文件夹中准备配置文件,您也要以这种方式进行注册和读取:

builder.RegisterModule(new ConfigurationSettinsgReader("<section-name>", "amazonDlls/app.config"));
builder.RegisterModule(新配置settinsgreader(“,“amazonDlls/app.config”);
您将得到找不到类型的异常。

如组件类型名称中所述,这是由.NET规范定义的格式。完全限定类型名不包括路径

使用开箱即用配置格式无法指定路径。你有两个选择

选项1:添加探测路径

默认情况下,.NET仅在应用程序的bin文件夹中搜索程序集。你可以读到

.NET允许您通过
app.config
web.config
指定其他搜索路径:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="bin;bin\plugins" />
    </assemblyBinding>
  </runtime>
<configuration>

所以这可能不适合你

如果必须位于bin文件夹之外(而不是子目录中的bin文件夹之下)。如果这样做,程序集似乎必须有一个强名称,因此请记住这一点。
probingPath
机制不需要强名称

当然,在GAC和bin文件夹之外的指定位置加载程序集也存在固有的风险。需要考虑的事情。

选项2:创建自己的配置读取器


这将更加困难。您可以创建自己的配置读取器版本,包括文件位置支持。你可能需要考虑如何让它发挥作用,但是,同样,这样做也有一些风险。概述问题。

谢谢您的回复。我尝试了第一个选项,但仍然得到相同的错误:“找不到类型“x,x”。它可能需要程序集鉴定,例如“MyType,MyAssembly\”您是否更改了配置?程序集限定类型名称中没有斜杠,但示例组件类型中有斜杠。尝试修复类型名称以确认为.NET格式。请参阅我答案中的doc链接。如果您确实更改了配置,是否可以更新您的问题?