上文私有部署应用程序升级策略中我们制作了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