JUST DO IT ~

我只想当个程序员

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





posted on 2008-09-15 12:14 小高 阅读(612) 评论(0)  编辑  收藏 所属分类: Build构建|git版本控制


只有注册用户登录后才能发表评论。


网站导航:
 

导航

<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

常用链接

留言簿(3)

随笔分类(352)

收藏夹(19)

关注的blog

手册

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜