.net - 如何使用配置在私有(private)文件夹中操作多个程序集版本?

标签 .net assemblies version configuration-management assemblybinding

我有一个场景,我需要存储在应用程序私有(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/

相关文章:

c# - NUnit 使用备用构造函数执行

c# - 按钮上的文本居中

python - NumPy 版本字符串记录在哪里?

c# - 我如何检测连接到电脑 USB 的数码相机?还有相机名称

c# - 基于局部变量的 LINQ

c# - .NET4 : In-Process Side-by-Side Execution Explained

.net - 确定程序集是否是 .NET 框架的一部分

python - 将 2.x 代码移植到 3.x 时出现 tkinter 问题, 'tkinter' 模块属性不存在

.net - 在 .NET Compact Framework 中获取程序集的版本而不加载它