Перенаправление моей политики на GAC не работает

Я создал базовый проект в 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")]

Затем я установил v1.0.0.0 на GAC:

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 ответ

Решение

Проблема заключалась в том, что политика была правильной, но Major а также Minor версии были не такими, как на.dll, и поэтому он не работал.

Другие вопросы по тегам