我一直在尝试加载位于应用程序基目录下的子目录中的私有程序集。我有一个名为Sparrow.dll的程序集,它位于plugins目录下(也位于应用程序库目录下)。每当我调用Assembly.Load(" Sparrow")时,我都会收到System.IO.FileNotFoundException。
我使用带有标记的app.exe.config,并使用下面一行的同一程序集的强名称版本;
Assembly assem = Assembly.Load("Sparrow");
但是,当我将程序集更改为弱程序集时,它不起作用。
配置文件的内容如下;
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly name="Sparrow, Culture=neutral, PublicKeyToken=xxxxxx">
<codeBase version="1.0.1.1" href="plugins/Sparrow.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
我读了很多东西,但我不确定使用标签来定位弱装配是否是一种好习惯。
答案 0 :(得分:2)
您可以将probing
元素用于此目的:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="plugins" />
</assemblyBinding>
</runtime>
</configuration>
该元素表示将搜索plugins
子文件夹以查找程序集。
但请注意,只能以这种方式指定应用程序目录的后代路径上的目录。
您问题中的配置文件有误。根据文档,XML配置应如下所示:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Sparrow"
publicKeyToken="null"
culture="neutral" />
<codeBase version="1.0.1.1" href="plugins/Sparrow.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
但是,我认为在您的情况下使用probing
元素将是更好的选择。