我在GAC上的策略重定向无效

时间:2013-05-09 08:47:03

标签: .net-assembly gac gacutil publisher-policy

我在WinForms中创建了一个基本项目,我有一个.exe来加载一个非常简单的库:

.exe:

    public Form1()
    {
        InitializeComponent();
        int a;
        int b;
        a = 7;
        b = 3;
        MessageBox.Show(Sumar.SumResult(a, b));
    }

图书馆:

public class Sumar
{
    public static string SumResult(int a, int b)
    {
        return (a + b).ToString(CultureInfo.InvariantCulture);
    }
}

真的很简单。第一版库的程序集:

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

然后我在GAC上安装了v1.0.0.0:

gacutil -i TestLibrary.dll

我将库中的代码更改为不同:

public class Sumar
{
    public static string SumResult(int a, int b)
    {
        return (a - b).ToString(CultureInfo.InvariantCulture);
    }
}

并将程序集版本更改为1.0.0.1。然后我将该库安装到GAC。

.exe仍然消耗1.0.0.0 .dll,所以我创建了一个使用v1.0.0.1的策略:

al /link:test.1.0.config /out:policy.1.0.TestLibrary.dll /keyfile:sgKey.snk /platform:x86

.config看起来像这样:

<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="TestLibrary"
                      publicKeyToken="a96822fc2f88c1d9"
                      cultures="neutral" />
    <bindingRedirect oldVersion="1.0.0.0" newVersion="1.0.0.1" />
  </dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

之后,我将该政策安装到GAC:

gacutil /i policy.1.0.TestLibrary.dll

它表示程序集已成功添加到缓存,但我的.exe仍在使用v1.0.0.0。

那么,为什么我的重定向不起作用?

1 个答案:

答案 0 :(得分:0)

问题是该政策是正确的,但MajorMinor版本与.dll上的版本不同,这就是为什么它没有&#39;工作。