上文私有部署应用程序升级策略中我们制作了SomeMethodLib.dll文件并通过私有部署方式应用,那么如何部署到GAC并使用呢。
1、通过VS命令提示工具中的Gacutil工具将SomeMethodLib.dll安装到GAC
gacutil /i SomeMethodLib.dll
2、查看是否正确部署
gacutil /l SomeMethodLib
3、更改.config文件,让CLR从GAC中尝试加载SomeMethodLib,注意已将CodeBase屏蔽掉了。
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="NoSN;V1;V2;V3"/>
<!--确定相关程序集 查找公钥为1217633aa9436597,语言文化为中性的版本号在1.0.0.1到1.0.0.2
的程序集SomeMethodLib,定位为相同公钥相同程序集名称且版本号为1.0.0.3的程序集-->
<dependentAssembly>
<assemblyIdentity type="win32"
name="SomeMethodLib"
publicKeyToken="1217633aa9436597" culture="neutral"/>
<!--<bindingRedirect oldVersion="1.0.0.1" newVersion="1.0.0.2"/>
<codeBase version="1.0.0.2" href="V2/SomeMethodLib.dll"/>-->
<bindingRedirect oldVersion="1.0.0.1-1.0.0.2" newVersion="1.0.0.3"/>
<!--<codeBase version="1.0.0.3" href="V3/SomeMethodLib.dll"/>-->
<publisherPolicy apply="no"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
4、运行DeployTest.exe,查看是否调用了SomeMethodLib
从运行结果上可以看到的确调用了版本1.0.0.3
5、从GAC中卸载SomeMethodLib
gacutil /u assemblyname
6、继续运行DeployTest.exe查看运行结果,查看我们是否调用的GAC中的SomeMethodLib
从运行结果可以看出,当SomeMethodLib被卸载后应用程序会抛出System.IO.FileLoadException异常。
使用Gacutil.exe的细节可查看MSDN文档:
在给用户部署时会用到Gacutil.exe,可以在有VS的机器上查找Gacutil.exe很容易找到文件位置:C:\ProgramFiles\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools