如何:为预编译网站的程序集签名
更新:2007 年 11 月
可以为 ASP.NET 编译工具 (Aspnet_compiler.exe) 产生的程序集进行数字签名,以帮助提高 Web 应用程序的安全性。使用强名称为程序集签名使得攻击者更难将恶意代码引入您的应用程序。有关使用签名的程序集的好处的更多信息,请参见具有强名称的程序集。
每当使用 -keyfile 或 -keycontainer 开关为程序集签名时,还必须使用 -aptca 开关指定将 AllowPartiallyTrustedCallersAttribute 属性应用于程序集。如果不指定 -aptca 开关,程序集就不能由 ASP.NET 进程调用,并且 Aspnet_compiler.exe 将引发异常。
本主题中的过程使用具有强名称的密钥对以及 Aspnet_compiler.exe 的开关和参数。有关此工具的更多信息,请参见 ASP.NET 编译工具 (Aspnet_compiler.exe)。有关具有强名称的密钥的更多信息,请参见 创建和使用具有强名称的程序集。
有关预编译的更多信息,请参见 ASP.NET 网站预编译。
为预编译网站的程序集签名
创建一个具有强名称的密钥对或密钥容器。有关创建具有强名称的密钥的更多信息,请参见如何:创建公钥/私钥对。
打开一个命令窗口并定位到包含 .NET Framework 的文件夹。
.NET Framework 将安装在以下位置。
%windir%\Microsoft.NET\Framework\version
通过在命令提示符处键入以下内容来运行 aspnet_compiler 命令。
aspnet_compiler -v virtualPathtargetPath -keyfile keyFile.snk -aptca
virtualPath 参数指示网站的 Internet 信息服务 (IIS) 虚拟路径;targetPath 参数指示已编译网站的目录的物理路径;keyFile.snk 指示密钥文件的名称。
如果使用密钥容器,则在命令提示符处键入以下内容。
aspnet_compiler -v virtualPathtargetPath -keycontainer keyContainer.snk -atpca
如果您的网站不是 IIS 应用程序,并因此在 IIS 元数据库中没有项,则在命令提示符处键入以下内容。
aspnet_compiler -p physicalOrRelativePath -v / targetPath -keyfile keyFile.snk -aptca
在这种情况下,physicalOrRelativePath 参数是指网站文件所在的完全限定目录路径,或者相对于当前目录的路径。在 physicalOrRelativePath 参数中允许使用句点 (.) 运算符。-v 开关指定一个根目录,编译器将使用该目录来解析应用程序根目录引用,例如,用代字号 (~) 运算符。当您为 -v 开关指定值 / 时,编译器将使用物理路径作为根目录来解析路径。
如果使用密钥容器,则在命令提示符处键入以下内容。
aspnet_compiler -p physicalOrRelativePath -v / targetPath -keycontainer keyContainer.snk -aptca
targetPath 参数是目标目录的物理路径。