我有一个场景,我需要存储在应用程序私有(private)文件夹中的同一程序集的多个版本,结构如下:
.\My.dll // latest version, say 1.1.3.0
.\v1.1.1\My.dll // version 1.1.1.0
.\v1.1.2\My.dll // version 1.1.2.0
我的问题是 .Net 运行时,当被要求提供旧版本之一时,总是找到最新版本,然后由于内部版本号不匹配而失败,然后再尝试探测更好的匹配。
程序集是强命名的,我在 app.config 中使用此配置:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="My"
publicKeyToken="xxxxxxxx" culture="netural" />
<bindingRedirect oldVersion="1.0.0.0-1.1.1.0"
newVersion="1.1.1.0" />
<bindingRedirect oldVersion="1.1.3.0-1.1.65535.65535"
newVersion="1.1.3.0" />
<codeBase version="1.1.1.0" href="v1.1.1\My.dll" />
<codeBase version="1.1.2.0" href="v1.1.2\My.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
希望我在这里错过了一些东西。我知道这可以通过监听 AppDomain.AssemblyResolve 在代码中解决。事件,但我很想看到一个纯粹的配置解决方案。
更新:所以我发现了这个错误,正如 Kent 假设的那样,是一个错字。
culture="netural"
应该是 culture="neutral"
.也就是说,如果没有错字,在使用
codeBase
时解析效果很好。指向每个版本的元素。在这种情况下,探测元素似乎不起作用。
最佳答案
在没有看到整个解决方案的情况下,我只能假设您在某处有错字。我只是为自己尝试了这个 - 在 fuslogvw 的帮助下,我能够让它工作。
我有三个版本的程序集,使用应用程序引用的版本比其输出目录中的版本旧。 CLR 找到重定向和 codeBase 条目并加载正确的(旧)版本。
如果您提供电子邮件地址,我可以通过电子邮件向您发送我的解决方案。
肯特
关于.net - 如何使用配置在私有(private)文件夹中操作多个程序集版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/638310/