Перенаправление моей политики на 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, и поэтому он не работал.