认识 : 看了 浅谈.NET中的版本管理 ildasm.exe MyForm.exe

认识 : 看了 浅谈.NET中的版本管理 ildasm.exe MyForm.exe

看了  浅谈.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





你可能感兴趣的:(认识 : 看了 浅谈.NET中的版本管理 ildasm.exe MyForm.exe)