我在配置中通过autofac注册我的程序集。 我想要来自另一个文件夹的autofac加载程序集,没有'bin'文件夹。
我尝试将asssembly的'type'属性路径设置为:
<component type="Amazon.SQS.AmazonSQSClient, amazonDlls/AWSSDK" service="Amazon.SQS.IAmazonSQS, AWSSDK" />
但是我收到了无效的程序集名称错误。
我该怎么办 - 从特定文件夹注册程序集?
顺便说一句:我知道可以从代码中获取,但我想从config。
答案 0 :(得分:0)
无法在完全限定类型名称中提供程序集的路径。似乎甚至不可能从不在&#34; bin&#34;之外的不同目录中的库中注册类型。夹。即使您在与dll相同的文件夹中准备配置文件,也要注册并以这种方式阅读:
builder.RegisterModule(new ConfigurationSettinsgReader("<section-name>", "amazonDlls/app.config"));
您将获得未找到类型的例外。
答案 1 :(得分:0)
如the documentation所述,组件类型的名称为fully-qualified type names,这是.NET规范定义的格式。完全限定的类型名称不包含路径。
使用开箱即用的配置格式无法指定路径。你有几个选择。
选项1:添加探测路径
默认情况下,.NET仅在应用程序的bin文件夹中搜索程序集。您可以阅读how .NET locates assemblies on MSDN
.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>
These paths must be subdirectories of the bin folder因此可能不适合你。
如果它必须在bin文件夹之外(而不是在子目录下)you can use the <codeBase>
element to specify a URL location。如果你这样做,看起来装配必须有一个强名称,所以请记住这一点。 probingPath
机制不需要强名称。
当然,在GAC之外和bin文件夹之外的指定位置加载程序集存在固有的风险。需要考虑的事情。
选项2:创建自己的配置阅读器
这将会困难得多。您可以grab the Autofac.Configuration source创建自己的配置阅读器版本,其中包括文件位置支持。您可能需要查看Assembly.LoadFrom才能使其发挥作用,但同样,还有一些风险。 Assembly.LoadFrom docs概述了问题。