我正在创建一个ActiveX DLL程序集。我跟着this article。正如文章所提到的,我创建了一个.cs文件(使用记事本)并通过粘贴\WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx
下的文件并运行csc /t:library AClass.cs
来手动编译它。
在下一步,当我尝试使用regasm AClass.dll /tlb /codebase
注册此程序集时,它会显示一条消息,说明需要对此程序集进行签名。它不会抛出任何错误。但是,它迫使我启用'初始化未签名的ActiveX脚本'在IE设置下,它可以工作。
您能否指导我如何签署此类程序集...以便启用“初始化未签名的ActiveX脚本”#39;对所有客户来说都没有必要。
我正在使用带有VS2012的Windows Server 2012计算机..
答案 0 :(得分:3)
我认为你不需要手动签名。它只需要strong name,因为您使用/codebase
。
通常您会使用attribute in your code创建一个强名称,以便由CSC处理。
using System;
using System.Reflection;
[assembly:AssemblyKeyFileAttribute("MyPublicKey.snk")]
[assembly:AssemblyDelaySignAttribute(true)]
namespace MyNamespace
{
public class MyClass { }
}
答案 1 :(得分:1)
您可以使用SIGNTOOL
执行此操作。它是Windows SDK的一部分。请注意,您实际上并未签署“.cs”文件(这是源代码文件) - 您对程序集(即DLL或EXE文件)进行签名。
您需要有一个签名密钥,您可以使用the Strong Name Tool (sn.exe)创建签名密钥。
有关详细信息,请参阅this introduction to Code Signing。
答案 2 :(得分:-1)
好的,这就是我在签署大会时所做的: - (感谢上面两位回答过这个问题的作者,这是我所遵循的方法的总结:)
1)使用记事本创建cs文件:确保添加[assembly:AssemblyKeyFileAttribute(“mynewkey.snk”)] [assembly:AssemblyDelaySignAttribute(true)]在namespace标签上方并使用System.Reflection添加
2)转到c:\ program files x86 \ micorsoft SDKs \ windows \ v8.0 \ bin \ NETFX 4.0 Tools \ sn -k mynewkey.snk
3)转到C:\ mysource> C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ csc.exe / t:library myclass.cs
4)c:\ program files x86 \ micorsoft SDKs \ windows \ v8.0 \ bin \ NETFX 4.0 Tools \ sn -R AClass.dll myneykey.snk
5)regasm AClass.dll / tlb / codebase ----> (从4.0框架运行)
DONE
我已经关注了this msdn link但是没有按照链接的第4步的说明,我使用了: - sn -k mynewkey.snk - >这是创建一个密钥文件..
此外,您可以在Visual Studio中编译该文件。因此,无需执行上述步骤1到4,因为VS允许您签名以及编译文件。必须遵循步骤5才能注册DLL ..