如何使发布服务器策略文件重定向程序集请求



我在工作中创建了一个公共库,它安装在我们测试服务器上的GAC中。我最近更新了它,我希望我们所有的应用程序都能使用更新。我创建了一个发布者策略程序集,并将其与更新一起安装在GAC中,但当web应用程序加载Leggett.Common 1.0.0.0时,它不会重定向到Leggett.Cmmon 1.1.0.0。

我在网络驱动器上有一个通用程序集(实际上有五个,但让我们保持简单),我在它旁边创建了发布者策略xml文件,然后使用al.exe在同一文件夹中创建发布者策略程序集。之后,我将更新后的程序集放入GAC,然后将发布者策略程序集放入广汽。

公用程序集为"Leggett.common.dll",发布者策略文件为"1.1.Leggett.Cmmon.policy",发布程序策略程序集为为"policy.1.1 Leggett.Comn.dll"。

发布者策略文件的XML如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Leggett.Common"
                                  publicKeyToken="32cd8f1a53a4c744"
                                  culture="neutral" />
                <bindingRedirect oldVersion="1.0.0.0"
                                 newVersion="1.1.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

我做错了什么?

澄清
我正在我的本地开发机器上测试这一点,因为开发人员没有访问测试服务器的权限。

好的。。。被刺伤。。。

1-您是否尝试使用程序集绑定日志查看器(Fusilogvw.exe)来查看正在进行的程序集绑定?

你可以在中找到它

C: \Program Files\Microsoft SDK \Windows\v6.0A\Bin\FUSLOGV.exe(已安装VS2008)。

2-"我在一个网络驱动器上有一个通用程序集(实际上有五个,但让我们保持简单),"-这两个程序集都驻留在网络驱动器上吗?

更新:好…如果新程序集位于网络驱动器上,则可能存在一些信任问题。能否将新程序集部署到服务器上的本地驱动器,然后重新安装到GAC?

更新2:我知道。。愚蠢的东西。。。。您确定publicKeyToken和版本号正确吗?即,新程序集的AssemblyVersion属性肯定是1.1.0.0,并且公钥令牌是相同的(在GAC中)?

你试过删除文化属性吗?

Update3:嗨,Max…你能粘贴你使用的发布者策略文件吗?而且请记住,如果要从1.0重定向到更高版本的程序集,则必须使用重定向程序集的major.minor版本来命名发布者策略名称。因此,在您的情况下,发布者策略应命名为"policy.1.0.Leggett.Common.dll"。我注意到您已将其命名为"Policy1.1.Leggett.Cmmon.dll",这可能是它不起作用的原因。

最后,您必须确保使用与1.0和1.1程序集使用的密钥相同的密钥对发布者策略进行签名。

我构建了几个DLL,并将它们放在GAC中,然后在VS中使用控制台应用程序进行测试,它确实有效:)

更新4:嗨,Max,这是我从未想过的事情。创建发布者策略文件时,是否指定了平台?尝试使用构建

al/link:1.1.Leggett.Common.policy/out:policy.1.0.Leggett.Ccommon.dll/keyfile:/version:1.0.0.0

省略/platform开关,并明确指定版本号。

干杯
Kev

您正确识别了程序集,但对于其他正在阅读的人,请在不带文件扩展名的assemblyIdentity元素中通过其根引用程序集(例如,"Fubar"而不是"Fubar.dll")。

Microsoft的文档忽略了…#$%#!(!@!

最新更新