【问题标题】:Unable to generate a temporary class - Cryptographic failure while signing assembly无法生成临时类 - 签署程序集时加密失败
【发布时间】:2012-04-30 22:46:39
【问题描述】:

我有一个签名的类库,我想通过 sgen 工具为其创建程序集。但是,当我尝试运行以下命令时出现错误:

$ sgen.exe /a:testsign.dll /force /compiler:/keyfile:..\..\testsign.pfx /verbose /n
错误:无法生成临时类 (result=1)。
错误 CS1548:加密 签署程序集 '[...path...]\TestSign.XmlSerializers.dll' 时失败 -- '错误签名程序集 - - 参数不正确。 '

如果您需要更多帮助,请输入“sgen /?”。

我检查了MSDN 上的错误,其中指出

当程序集签名失败时会出现 CS1548。这通常是由于 无效的密钥文件名、无效的密钥文件路径或损坏的密钥 文件。

但是,我刚刚创建了密钥,路径是正确的,据我所知,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(我发现)。

【问题讨论】:

    标签: c# xmlserializer sign sgen


    【解决方案1】:

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

    即上面的例子改为:

    1. 和以前一样
    2. 和以前一样
    3. 和以前一样
    4. 和以前一样
    5. 转到“构建”选项卡
    6. 生成序列化程序集设置为开启
    7. 右键单击项目并选择卸载项目
    8. 右击项目并选择*edit nnn.csproj**
    9. 将下面的 sn-p 粘贴到某处

      <PropertyGroup>
          <SGenUseProxyTypes>false</SGenUseProxyTypes>
          <SGenPlatformTarget>$(Platform)</SGenPlatformTarget>
      </PropertyGroup>
      
    10. 重新加载并构建项目。

    【讨论】:

    • 不工作:) 同样的问题持续存在@Default
    • 3 年前当我发布这个答案时它起作用了。如果您有问题,我可以建议发布一个新问题吗? (如果你愿意,你可以链接到这个问题并解释为什么它没有帮助你,所以它不会作为重复而关闭)
    【解决方案2】:

    最初,我能够毫无问题地构建项目。 当另一个简单的项目无法构建/发布并抛出此错误时,这是​​相当奇怪的。

    在我以 Administrator 身份运行 Visual Studio 后,我能够构建它。

    参考:Gordon's 3log

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多