当前位置:中国站长下载文章中心网页编程.NET编程 → Assembly学习心得(2)

Assembly学习心得(2)

减小字体 增大字体 作者:不详  来源:不详  发布时间:2006-8-14 9:56:29

   <?xmlversion="1.0"encoding="utf-8"?>
   <configuration>
   <runtime>
   <assemblyBindingxmlns="urn:schemas-microsoft-com:asm.v1">
   <probingprivatePath="sub"/>
   </assemblyBinding>
   </runtime>
   </configuration> 当App.exe运行时,它就会在主目录下的sub目录中找到classB.dll,然后继续行。
   说明:
   当CLR需要定位一个程序集时,它将扫描应用程序的几个子目录,下面是才CLR扫描一个程序集时的顺序:
   …/Assembly/Bin/classB.DLL.
   …/Assembly/Bin/classB/classB.DLL.
   …/Assembly/Bin/sub/classB.DLL.
   …/Assembly/Bin/sub/classB/classB.DLL.
   …/Assembly/Bin/classB.EXE.
   …/Assembly/Bin/classB/classB.EXE.
   …/Assembly/Bin/sub/classB.EXE.
   …/Assembly/Bin/sub/classB/classB.EXE.
  
   注意: 如果App.exe引用的是强命名程序集,CLR会首先在GAC中查找,然后才按照上面的顺序查找。
  
   4. 创建和查看公钥/私钥对文件
   创建公钥/私钥对文件可以用.NET SDK自带的工具(SN.exe)来创建。 首先,创建一个公钥/私钥对文件
   SN -k App.key
   然后,用这个文件创建只包含共有密钥的文件:
   SN -p App.key App.publickey
   然后用-tp参数查看
   SN –tp App.publickey
  
   5. 创建强命名程序集
   有了公钥/私钥对,创建强命名程序集就很容易了。只需要把
   System.Reflection.AssemblyKeyFileAttribute特性加到源代码中就可以了。
   [assembly: AssemblyKeyFile("App.key")]
   一般都加到AssemblyInfo.cs文件中。
   现在重新build classB.cs,得到的将是一个强命名的程序集:
   csc /out:bin/classB.dll /t:library classB.cs AssemblyInfo.cs
  
   用ILDasm.exe查看,你会发现,在Assembly中的Public Key会有一大串值,这个就是程序集的公有密钥,它保证了整序集的唯一性。
   [img][/img]
   6. 把强命名的程序集classB.dll加入到GAC中。
   使用工具GACUtil.exe
   把classB.dll加入到GAC中:
   GACUtil /I classB.dll
   删除掉classB.dll,然后重新Build App.exe:
   csc /out:bin/app.exe /t:exe app.cs /addmodule:bin/classA.module /r:classB.dll
   App.exe运行正确,表明classB.dll已经成功加入到GAC中,成为一个共享程序集了。 程序集相互引用的规则:
  
   程序集种类
   是否可以引用弱命名程序集
   是否可以引用强命名程序集
  
   普通程序集
   是
   是
  
   强命名程序集
   否
   是
  
  
   把classB.dll移出GAC: GACUtil /u classB
   注意:
   移出的时候不能指定扩展名(因为在GAC中每一程序集对于对应的都是一个目录,而不是实际的程序集)。
  
   如果classB.dll不是一个强命名的程序集,而你想把app.exe build为一个强命名的,就会出错:
   error CS1577: Assembly generation failed -- Referenced assembly 'ClassB' does not have a strong name
   你可以试一试。J
  
   7. 并行执行(Side-By-Side)的例子
   http://www.microsoft.com/china/msdn/archives/library/
   dnnetdep/html/sidexsidenet.asp
  
   参考资料:
   l Applied Microsoft .NET Framework Programming ---- Jeffrey Richter
   l MSND Library
   l 感谢刘琳的大力帮助。
  
   <END>
    做人要厚道,请注明转自chinazhan中国站长(www.ChinaZhan.com)。

上一页  [1] [2]