我正在尝试为我的一些私有方法创建单元测试,并且我读到您可以通过[assembly: InternalsVisibleTo("DLLName")]
.
但是,我的不起作用,另一个解决方案是添加公钥。我试图通过获取我的单元测试项目的公钥,sn -Tp DLLName
但它抱怨它没有被强命名。
我怎样才能使它被强烈命名?我使用InternalsVisibleTo
错误的方式吗?
我正在尝试为我的一些私有方法创建单元测试,并且我读到您可以通过[assembly: InternalsVisibleTo("DLLName")]
.
但是,我的不起作用,另一个解决方案是添加公钥。我试图通过获取我的单元测试项目的公钥,sn -Tp DLLName
但它抱怨它没有被强命名。
我怎样才能使它被强烈命名?我使用InternalsVisibleTo
错误的方式吗?
我认为如果您转到项目的属性,在侧栏上应该有一个名为“签名”的导航链接。应该有一个选项来签署程序集。如果那不存在,那么我认为您不能给它起一个强名称吗?
很有可能您的单元测试程序集目前没有被强命名 - 毕竟,这是一个相对不寻常的要求,因为强命名的原因通常不适用于测试程序集。
但是,使用InternalsVisibleTo
确实需要这样做 - 因为这有点像您正在将强命名生产程序集的引用添加到测试程序集,并且您不能从强命名程序集引用非强命名程序集 -名为一。
因此,只需以与生产程序集(项目属性、签名)相同的方式对测试程序集进行强命名,给它一个密钥(例如与您的生产程序集相同的密钥),然后用于sn -Tp
获取公钥。
所有这一切都假设您最初的InternalsVisibleTo
尝试没有成功,因为生产程序集是强命名的。如果不是,那么对测试程序集进行签名将毫无帮助,您需要向我们提供有关您遇到的问题的更多信息。
使用程序集链接器创建和签署具有强名称的程序集
在命令提示符处,键入以下命令:
al /out:<assembly name> <module name> /keyfile:<file name>
在此命令中,程序集名称是要使用强名称签名的程序集的名称,模块名称是用于创建程序集的代码模块的名称,文件名是包含密钥对的容器或文件的名称. 以下示例使用密钥文件 sgKey.snk 使用强名称对程序集 MyAssembly.dll 进行签名。
al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk