DotNetOpenAuth在修改后编译,但在运行示例项目时抛出运行时异常

时间:2012-10-25 02:22:18

标签: c# visual-studio-2012 dotnetopenauth

我从GitHub下载了最新的DotNetOpenAuth代码,最初无法构建。我通过运行以下命令解决了问题:

sn -Vr *,2780ccd10d57b246

在这里找到:

http://www.dotnetopenauth.net/developers/contributing/quickstart-environment/

我继续对DotNetOpenAuth.AspNet项目进行了一些修改。编译得很好。然后我在样本下创建了一个MVC 4 Web项目来测试我的更改。该解决方案再次编译。但是,一旦我点击调试,我就会得到死亡的ASP.NET黄色屏幕,并出现以下错误:

无法加载文件或程序集“DotNetOpenAuth.AspNet”或其中一个依赖项。强名称签名无法验证。程序集可能已被篡改,或者是延迟签名但未使用正确的私钥完全签名。 (HRESULT异常:0x80131045)

MVC 4项目是从空模板创建的,因此没有对Microsoft.Web.WebPages.OAuth的引用

我错过了什么?我完成了上面链接中的其他步骤:

sn -k mykeyfile.pfx 
sn -i mykeyfile.pfx mykeycontainer
sn -p mykeyfile.pfx mykeyfile.pub 
sn -q -t mykeyfile.pub
sn -Vr *,<YourPublicKeyTokenHere>

并修改了文件\ tools \ DotNetOpenAuth.props,特别是行:27,29,30,带有新值

26. <SignAssembly>true</SignAssembly>
27. <PublicKeyFile Condition="'$(PublicKeyFile)' == ''">$(ProjectRoot)src\official-build-key.pub</PublicKeyFile>
28. <AssemblyOriginatorKeyFile Condition="'$(AssemblyOriginatorKeyFile)' == ''">$(PublicKeyFile)</AssemblyOriginatorKeyFile>
29. <KeyPairContainer Condition="'$(KeyPairContainer)' == ''">DotNetOpenAuth</KeyPairContainer>
30. <PublicKeyToken>2780ccd10d57b246</PublicKeyToken>
31. <DelaySign>true</DelaySign>
32. <SignedSubPath>signed\</SignedSubPath>

1 个答案:

答案 0 :(得分:6)

不需要修改道具文件。 问题可能是您使用的是64位计算机,而您运行的sn命令只会影响32位注册表。然后在运行时,您将失败,因为您在64位注册表上运行该网站,该注册表中没有跳过验证条目。

“正确”的方法是安装64位Windows SDK,以便获得64位sn.exe并运行该命令。但是,这是快速简便的方法:

查看您的注册码的值:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\StrongName\Verification\*,2780ccd10d57b246

并将该密钥复制到

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\StrongName\Verification\*,2780ccd10d57b246

然后重新启动所有相关进程(MSBuild.exe,devenv.exe,iis,WebDAV,或托管您的网站并报告错误的任何内容)。它应该开始为你工作。