我有一个场景,其中我具有相同的组件的多个版本,我需要在应用程序中的私人文件夹来存储,在像这样的结构:

.\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>

请参阅此处的详细信息

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top