有没有办法签署使用记事本创建并使用CSC命令编译的.CS文件?

时间:2014-01-14 12:03:51

标签: c# .net-assembly regasm csc

我正在创建一个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计算机..

3 个答案:

答案 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 ..