Unit testing 对强命名类库进行单元测试的步骤

Unit testing 对强命名类库进行单元测试的步骤,unit-testing,nunit,code-signing,strongname,Unit Testing,Nunit,Code Signing,Strongname,在Windows7 64位机器上,我有一个带有类库的解决方案,它有两个snk文件:“AcmePublic.snk”和“key.snk” 项目属性签名选项卡未选中“为程序集签名”复选框,但“AcmePublic.snk”在密钥文件下拉框中可见(灰显) 这些行位于AssemblyInfo.cs文件中: [assembly: AssemblyKeyFileAttribute("AcmePublic.snk")] [assembly: AssemblyDelaySignAttribute(true)]

在Windows7 64位机器上,我有一个带有类库的解决方案,它有两个snk文件:“AcmePublic.snk”和“key.snk”

项目属性签名选项卡未选中“为程序集签名”复选框,但“AcmePublic.snk”在密钥文件下拉框中可见(灰显)

这些行位于AssemblyInfo.cs文件中:

[assembly: AssemblyKeyFileAttribute("AcmePublic.snk")]
[assembly: AssemblyDelaySignAttribute(true)]
解决方案将构建

我使用NUnit NuGet包添加了一个类库。在此测试项目中,我复制了相同的项目属性签名设置(未选中,但选择了“AcmePublic.snk”),并在将.snk文件复制到测试项目中后添加了两行AssemblyInfo.cs。当然,我已经在测试项目中添加了对库项目的引用,并创建了一个测试,试图实例化其中一个类

此时将生成解决方案,但测试会抛出以下错误:

Could not load file or assembly AcmeData.Test or one of it's dependencies. Strong name could not be verified. The assembly may have been tampered with...
Key file 'AcmePublic.snk' is missing the private key needed for signing
此时,我选中了“项目签名”选项卡和“重建”选项卡中的“为程序集签名”复选框。“AcmePublic.snk”文件在每个文件中都被选中。解决方案会生成,但我在运行测试时会遇到相同的错误

我现在选择“key.snk”并在两个项目中重新选中“为程序集签名”复选框,重新生成并重新运行测试。同样的错误

因此,现在我将两个项目属性都设置为“AcmePublic.snk”,取消选中“为程序集签名”,并在两个AssemblyInfo.cs文件中注释掉这一行:

[assembly: AssemblyDelaySignAttribute(true)]
请记住,AssemblyInfo.cs仍有以下行:

[assembly: AssemblyKeyFileAttribute("AcmePublic.snk")]
解决方案生成失败,出现以下错误:

Could not load file or assembly AcmeData.Test or one of it's dependencies. Strong name could not be verified. The assembly may have been tampered with...
Key file 'AcmePublic.snk' is missing the private key needed for signing
现在,我重新选中“为程序集签名”复选框,并确保在两个下拉列表中都选中了“key.snk”。重建。没问题

运行测试。错误:

Could not load file or assembly 'Dapper' or one of it's dependencies. A strongly-named assembly is required.
此错误来自类库中的一行,而不是测试项目

我该怎么办


当类库使用Dapper时,我应该如何设置一个类库项目作为NuGet包(尽管是内部的)使用,并拥有一个NUnit测试项目?

为什么要尝试将测试命名为强名称?没有必要这样做。因为它正在测试的库具有强名称。再次。。。没有必要那样做。强名称程序集无法引用弱名称程序集,但反向引用没有问题。您唯一需要给测试程序集起一个强名称的时候是,如果您想让内部构件对它可见。太棒了。非常感谢。我没有推断出你的原意,谢谢你的澄清。