2013-05-09 52 views
0

我创建了一个基本的项目中的WinForms上,我有加载一个非常简单的库.exe对GAC我的政策重定向不工作

.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。

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

回答

0

问题是策略是正确的,但MajorMinor版本与.dll版本不一样,这就是为什么它不起作用。