我有一个场景,我需要存储在应用程序私有文件夹中的同一程序集的多个版本,结构如下:
.\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
指向每个版本的元素时,解析效果很好。在这种情况下,探测元素似乎不起作用。