我在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。
那么,为什么我的重定向不起作用?
问题是策略是正确的,但是Major
和Minor
版本与.dll上的版本不一样,这就是为什么它不起作用