为DLL签名
在VS2005前的版本可以如下操作:
1.在.NET 命令提示中输入sn -k c:\test.snk 创建一个新的随机密钥
将test.snk复制到项目的.csproj所在目录中
2.修改“AssemblyInfo.cs”文件:
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("..\\..\\test.snk")]
在项目中的每个类类文件添加代码激活授权功能
namespace ClassLibrary1
{
public class Class1
{
[StrongNameIdentityPermissionAttribute(SecurityAction.LinkDemand, PublicKey =
"00240000048000009400000006020000002400005253413100040000010001009f058a31a3e6a3" +
".........................." +
".........................." +
".........................." +
".......")]
public Class1()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
}
}
3."00240000048000009400000006020000002400005253413100040000010001009f058a31a3e6a3" +
".........................." +
".........................." +
".........................." +
"......."
这串数字就是强名称密钥的公钥了,下面是怎么得到该公钥
输入sn -p c:\test.snk c:\publicKey.snk (从 test.snk 中提取公钥并将其存储在 publicKey.snk 中)
再输入sn -tp c:\publicKey.snk (显示公钥信息)
上面这个命令就能看到PublicKey后面的字符串了,把那字符串copy下来。
在VS2005及以后的版本可以如下操作还要如下操作:
在编译器中输入命令:“输出目录”>csc /keyfile:文件地址\snk文件 /t:library /r:System.EnterpriseServices.dll 编译文件.cs。
备注:
使用私钥进行程序集签名,执行命令:
“输出目录”>csc /t:library /keyfile:文件地址\snk文件 编译文件.cs
“输出目录”>gacutil /i 编译项目.dll
程序集已成功添加到缓存中
“输出目录”>gacutil /u 编译项目.dll
找不到与以下内容匹配的程序集: 编译项目.dll
卸载的程序集数 = 0
失败次数 = 0
“输出目录”>gacutil /u 编译项目
程序集: 编译项目, Version=0.0.0.0, Culture=neutral, PublicKeyToken=........, processorArchitecture=MSIL
已卸载: 编译项目, Version=0.0.0.0, Culture=neutral, PublicKeyToken=........, processorArchitecture=MSIL
卸载的程序集数 = 1
失败次数 = 0
注意显示的公钥标记与卸载程序集时显示的PublickeyToken是一样的。
使用 sgKey.snk 密钥对为程序集签署强名称。
sn -R 编译项目.dll snk文件.snk
===========================================================
/////以上我在2008没测试成功 别的项目照样调用///////////////////////////////////////////
===========================================================
后来找到一篇文章,我想说...方法很蠢但很有效.......没办法 好像2008没有验证签名...或许有只是功能要开...我是没找到.....
文章地址:http://www.cnblogs.com/JieNet/archive/2008/06/15/1222271.html
代码:
namespace ClassLibrary1
{
public class Class1
{
public Class1()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public string Insert()
{
if (ValidateUser()) { return "ok"; }
else { return "faild"; }
}
/// <summary>
/// 验证使用者
/// </summary>
/// <returns></returns>
private static bool ValidateUser()
{
if (Assembly.GetEntryAssembly().GetName().FullName.Contains("PublicKeyToken=.........."))
return true;
return false;
}
}
}

浙公网安备 33010602011771号