看了 浅谈.NET中的版本管理
http://www.microsoft.com/china/community/program/originalarticles/techdoc/DOTNETVersion.mspx
GAC:
计算机范围内的代码缓存,它存储专门安装的程序集,这些程序集由计算机上的许多应用程序共享。在全局程序集缓存中部署的应用程序必须具有强名称,一个程序集如果注册到了GAC里,被其他程序集合引用的时候,将不会拷贝副本到引用的程序目录中。 (本文只讨论注册到GAC中的程序集)
实际就是 system32\ 目录的做的作用, 系统安装一份 就可以了,
其他的程序要用 , 直接到界面上去引用, 不会有任何问题. 在系统 using 直接调, ------反正就是不需要注册组件文件拷贝.............
如果没有 代码缓存 ...必须要自己注册dll 文件 然后程序来引用
好处 :
1 多版本维护替换dll
他的另外一个作用在文中提及,就是可以进行多个版本注册....... 使用的程序是 1.0dll编译的 ..在升级到GAC到第二版dll ..................使用的程序不需要重新编译,只要对 config 文件进行版本替换就可以的....
这个是比较好的特点,允许我们轻松处理dll的版本
虽然COM中 使用注册表和 也能做到这点 dll 但是好像很复杂 .....
2.实现简单......
步骤
1//首先生成强名称到文件中
sn –k c:\Version.snk2 //写类文件
v1.cs
using System;
using System.Reflection;
[assembly: AssemblyKeyFile(@"c:\Version.snk")] //因为注册到GAC,所以使用强名称签名
[assembly: AssemblyVersion("1.0.0.0")] //设置版本号
namespace V1
{
3 汇编查看代码
D:\c_\forms>ildasm.exe MyForm.exe
汇编 虚拟机代码 看实质
ame是程序集的名称 publicKeyToken是公匙的标记;
// Metadata version: v2.0.50727
.assembly extern /*23000001*/ 'System.Windows.Forms'
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 2:0:0:0
}
打开%SystemDir%\assembly
替换dll 不要拷贝文件
TestVersion.exe.config里面打入
<?xml version="1.0"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="V1" publicKeyToken=" 758fe4e9db9d8251"/>
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
大致对 dotnet下同版本理解
DotNet中的版本由4个物理号码组成,如图(一)
Assembly Info 的参数理解
描述整个程序 版本名称,
版本号码 GUI
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("NHibernateWithAccess")]
[assembly: AssemblyDescription("A sample application showing how to use NHibernate with Access/Jet")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("NHibernateWithAccess")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("da9b5517-7c63-4ed2-8f42-e573af1df70b")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
sn –k c:\Version.snk