如何在使用配置的私人文件夹多集版本操作?
-
10-07-2019 - |
题
我有一个场景,其中我具有相同的组件的多个版本,我需要在应用程序中的私人文件夹来存储,在像这样的结构:
.\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 事件,但我很想看到纯配置的解决方案。
<强>更新强>因此,我发现了错误,这是因为假定肯特,一个错字。 culture="netural"
应culture="neutral"
。
这就是说,没有错字,用codeBase
指向每个版本元素时,解决的伟大作品。
探测元素似乎并没有在这种情况下工作。
解决方案
在没有看到完整的解决方案,我只能假设你有一个错字的地方。我只是尝试这样为自己和 - 与 fuslogvw的帮助,我能得到它的工作。
我有该组件的三个版本和消费应用程序引用比其输出目录的旧版本。在CLR发现重定向和代码库条目并加载正确的(旧的)版本。
如果你提供一个电子邮件地址,我可以向您发送电子邮件我的解决方案。
肯特
其他提示
你能使用probepath?我们使用这种强制不受控制(例如第三方解析器 - 如MSTest的)。寻找我们需要它们是组件
<?xml version ="1.0"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="v1.1.1;v1.1.2;"/>
</assemblyBinding>
</runtime>
</configuration>
请参阅此处的详细信息
不隶属于 StackOverflow