2012-04-19 66 views
5

我有一个签名类库,我想通过sgen工具创建程序集。不过,我得到一个错误,当我尝试运行以下命令:无法生成临时类 - 签署程序集时加密失败

$ sgen.exe /a:testsign.dll /force /compiler:/keyfile:..\..\testsign.pfx /verbose /n
Error: Unable to generate a temporary class (result=1).
error CS1548: Cryptographic failure while signing assembly '[...path...]\TestSign.XmlSerializers.dll' -- 'Error signing assembly - - The parameter is incorrect. '

If you would like more help, please type "sgen /?".

我检查其中指出

CS1548 occurs when assembly signing fails. This is usually due to an invalid key file name, an invalid key file path, or a corrupt key file.

不过,我刚刚创建的键上MSDN错误,路径是正确的据我所知,Visual Studio 2010不会创建损坏的密钥。

这个问题很容易重现。

  1. 使用代码pasted here创建一个新的类库。
  2. 创建两个班,一个class TestSigning和一个class Model
  3. 去项目属性>签名,并检查“登录本次大会”
  4. 创建
  5. 打开Visual Studio命令提示符新的强名称密钥文件(2010年)
  6. 找到该DLL并运行sgen /a:<dllname> [... as above ...]

我的猜测是有东西的密钥文件的公钥。但我找不到任何来源,我怎么通知sgen我用来保护密钥文件的密码。

我不知道如何着手。我在这里看到的其他线程有相同的错误“标题”unable to generate temporary class但不同的错误细节,其中没有Cryptographic failure(我发现)。

回答

3

按照this thread中的说明解决了此问题。虽然它不是用sgen工具手动完成的,但它是通过Visual Studio完成的。

也就是说,上面的例子改为:

  1. 像以前
  2. 像以前那样像以前那样前
  3. 转到Build标签
  4. 设置生成序列化程序集
  5. 右键单击该项目并选择卸载项目
  6. 右键单击该项目并选择*编辑nnn.csproj **
  7. 粘贴下面的代码段某处

    <PropertyGroup> 
        <SGenUseProxyTypes>false</SGenUseProxyTypes> 
        <SGenPlatformTarget>$(Platform)</SGenPlatformTarget> 
    </PropertyGroup> 
    
  8. 刷新和构建项目。

+0

不工作:)同样的问题持续存在@default – 2015-03-03 13:31:04

+0

它3年前工作时,我张贴了这个答案。如果你有问题,我可以建议发布一个新问题吗? (如果你想要,你可以链接到这个问题,并解释为什么它没有帮助你,使它不作为重复关闭) – Default 2015-03-03 13:47:44

1

最初我能够在没有任何打嗝的情况下构建项目。 当另一个简单的项目不能被构建/发布并抛出这个错误时,这太奇怪了。

在我运行Visual Studio后,我能够构建这个作为管理员

参考:Gordon's 3log

相关问题