在Windows 7 64位计算机上,我有一个带有两个snk文件的类库的解决方案:“AcmePublic.snk”和“key.snk”
项目属性“签名”选项卡未选中“签署程序集”复选框,但“密钥文件”下拉框中显示“AcmePublic.snk”(灰色)。
这些行位于AssemblyInfo.cs文件中:
[assembly: AssemblyKeyFileAttribute("AcmePublic.snk")]
[assembly: AssemblyDelaySignAttribute(true)]
解决方案构建。
我使用NUnit NuGet包添加了一个类库。对于这个测试项目,我复制了相同的Project Properties Signing设置(未选中但选择了“AcmePublic.snk”)并添加了两个AssemblyInfo.cs行 - 将.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...
此时,我检查项目签名选项卡中的“签署程序集”复选框并重建。在每个文件中选择“AcmePublic.snk”文件。解决方案构建但运行测试时出现相同的错误。
我现在选择“key.snk”并重新检查两个项目中的“签署程序集”复选框,重建并重新运行测试。同样的错误。
所以,现在我将项目属性设置为“AcmePublic.snk”,取消选中“签署程序集”,并在AssemblyInfo.cs文件中注释掉这一行:
[assembly: AssemblyDelaySignAttribute(true)]
请记住AssemblyInfo.cs仍然有这一行:
[assembly: AssemblyKeyFileAttribute("AcmePublic.snk")]
解决方案无法构建,出现此错误:
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.
这个错误来自类库中的一行,而不是测试项目。
我该怎么办?
我应该如何设置一个类库项目以用作NuGet包(虽然是内部的)并且在类库使用Dapper时有一个NUnit测试项目?