100165445.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 110 行 · 第 1/2 页
HTM
110 行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
14.4.9 使用强名称发布代码
</title></head>
<body>
<div class="area">
<div class="col1">
<div class="lineBlue">
</div>
<!-- title -->
<div class="arcTitle">
<h1>
<a href="../16">
C#高级编程(第3版)【全文连载】
</a>
</h1>
<div style="text-align: center; font-size: 15px">
<a href="100165445.htm">
14.4.9 使用强名称发布代码
</a>
</div>
<div style="text-align: center; font-size: 15px">
<a class="url" href="../../default.htm">http://book.csdn.net/</a>
2006-10-13 14:41:00
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165445.htm'><font color='red'>14.4.9 使用强名称发布代码</font></a></h1>
<div id="divRelateNode" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165442.htm'>14.4.6 代码组的删除</a></div><div style='float:right;width:49%'>·<a href='100165443.htm'>14.4.7 代码组权限的更改</a></div><div style='float:left;width:49%'>·<a href='100165444.htm'>14.4.8 权限集的创建和应用</a></div><div style='float:right;width:49%'>·<a href='100165446.htm'>14.4.10 使用证书发布代码</a></div><div style='float:left;width:49%'>·<a href='100165447.htm'>14.4.11 区域的管理</a></div><div style='float:right;width:49%'>·<a href='100165448.htm'>14.5 小结</a></div></div>
</div>
</div>
</div>
<!-- main -->
<div id="main">
<div id="text"> <link href="css.css" rel="stylesheet" type="text/css" /><h3 style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 0cm; MARGIN-RIGHT: 0cm; FTEL: 8.15pt"><a ftel="_Toc507815625"><span lang="EN-US">14.4.9 </span></a><span style="FONT-FAMILY: 黑体">使用强名称发布代码</span></h3>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">当使用强名称确认程序集的身份及其完整性时,使用</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">可以把程序集与代码组进行匹配。在通过网络部署程序集时</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">例如,通过</span><span lang="EN-US">Internet</span><span style="FONT-FAMILY: 宋体">发布软件时</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">,使用强名称的情况非常普遍。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">对于软件公司而言,如果想利用</span><span lang="EN-US">Internet</span><span style="FONT-FAMILY: 宋体">为客户提供代码,就可以创建一个程序集,为它起一个强名称。强名称可以确保惟一地识别程序集,保护程序集免受改动。软件公司的客户可以把强名称合并到他们的代码访问安全策略中,然后,明确地把权限赋予与强名称相匹配的程序集。如第</span><span lang="EN-US">13</span><span style="FONT-FAMILY: 宋体">章所述,强名称包括程序集中所有文件的散列表的校验和。这样,就可以得到自从发布者创建强名称之后程序集没有被更改的强证据。</span></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">注意,如果应用程序使用了安装程序,则安装程序将安装已经拥有强名称的程序集。强名称是在程序集发送给客户之前为程序集的发布而产生的,安装程序不运行这些命令。原因是强名称要保证程序集离开软件公司之后没有改动,为此,软件公司通常不但把应用程序代码发送给客户,还把程序集的强名称副本单独发送给客户。把强名称发送给客户时,最好使用比较可靠的方式</span><span lang="EN-US" style="COLOR: black">(</span><span style="COLOR: black; FONT-FAMILY: 宋体">例如通过传真或经过加密的电子邮件</span><span lang="EN-US" style="COLOR: black">)</span><span style="COLOR: black; FONT-FAMILY: 宋体">,以确保程序集在传送过程中没有更改。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">下面看一个示例,在这个示例中,要创建一个具有强名称的程序集,这个程序集是通过强名称发布的,程序集的接收者可以使用强名称把</span><span lang="EN-US">FullTrust</span><span style="FONT-FAMILY: 宋体">权限赋予程序集。</span></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">由于强名称利用的是公钥加密法,因此首先需要创建一对密钥。公钥和私钥都保存在指定的文件中,用于标记强名称。为了创建一对密钥,使用</span><span lang="EN-US" style="COLOR: black">Strong Name </span><span style="COLOR: black; FONT-FAMILY: 宋体">实用程序</span><span lang="EN-US" style="COLOR: black"> (sn.exe)</span><span style="COLOR: black; FONT-FAMILY: 宋体">,</span><span lang="EN-US" style="COLOR: black">sn.exe</span><span style="COLOR: black; FONT-FAMILY: 宋体">除了可以创建密钥对之外,还可以管理密钥和强名称。使用下面的命令可以创建密钥:</span></p>
<p class="a6" style="MARGIN-TOP: 4.9pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><strong><span lang="EN-US" style="COLOR: black">>sn.exe –k key.snk</span></strong></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">然后,把密钥文件</span><span lang="EN-US">key.snk</span><span style="FONT-FAMILY: 宋体">放在项目文件夹中。之后,使用程序集属性把密钥添加到代码中。把程序集属性添加到</span><span lang="EN-US">AssemblyInfo.cs</span><span style="FONT-FAMILY: 宋体">中之后,就可以重新建立程序集。重新编译可以确保重新计算散列的信息,并确保程序集免受恶意的改动:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; BACKGROUND: #f2f2f2; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US" style="COLOR: black">[assembly: AssemblyKeyFileAttribute("../../key.snk")]</span></p>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?