C# - 如何使我的程序集强烈命名?

时间:2013-09-06 19:22:54

标签: c# asp.net visual-studio

我正在尝试为我的一些私有方法创建单元测试,并且我读到您可以通过[assembly: InternalsVisibleTo("DLLName")]从单元测试中访问它们。

然而,我的不工作,另一种解决方案是添加公钥。我试图通过sn -Tp DLLName获取我的单元测试项目的公钥,但它抱怨它没有强名称。

我怎样才能使它被强烈命名?我是否以错误的方式使用InternalsVisibleTo

3 个答案:

答案 0 :(得分:3)

我认为如果你转到项目的属性,在侧栏上应该有一个名为“签名”的导航链接。应该有一个签署程序集的选项。如果那不存在,那么我认为你不能给它一个强有力的名字?

答案 1 :(得分:3)

有可能你的单元测试程序集目前没有强烈命名 - 毕竟,这是一个相对不寻常的要求,因为强命名的原因通常不适用于测试程序集。 / p>

然而,使用InternalsVisibleTo 需要这个 - 因为它有点像你从强烈命名的生产程序集添加一个引用到测试程序集,你可以从强名称的程序集中引用一个非强名称的程序集。

因此,只需使用与生产装配(Project Properties,Signing)相同的方式对测试装配进行强烈命名,为其提供一个键(例如与生产装配相同的一个),然后 使用sn -Tp获取公钥。

所有这一切都假设原始InternalsVisibleTo尝试不起作用的原因因为生产程序集具有强名称。如果不是,那么签署测试程序集将无济于事,您需要向我们提供有关您所看到的问题的更多信息。

答案 2 :(得分:0)

使用程序集链接器

创建具有强名称的程序集并对其签名

在命令提示符下,键入以下命令:

al /out:<assembly name> <module name> /keyfile:<file name>

在此命令中,程序集名称是要使用强名称进行签名的程序集的名称,模块名称是用于创建程序集的代码模块的名称,文件名称是包含的容器或文件的名称钥匙对。 以下示例使用密钥文件sgKey.snk以强名称对程序集MyAssembly.dll进行签名。

al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk