无法生成临时类 - 签署程序集时出现加密失败

时间:2012-04-19 12:10:59

标签: c# xmlserializer sign sgen

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

  

$ sgen.exe /a:testsign.dll / force /compiler:/keyfile:..\..\testsign.pfx / verbose / n
  错误:无法生成临时类(结果= 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 ...]
  7. 我的猜测是密钥文件的公钥。但我找不到任何关于如何通知sgen我用来保护密钥文件的密码的来源。

    我不知道该怎么办。我在SO上看到的其他线程有相同的错误“header”unable to generate temporary class但是有不同的错误细节,其中没有Cryptographic failure(我发现)。

2 个答案:

答案 0 :(得分:3)

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

即,上面的例子改为:

  1. 和以前一样
  2. 和以前一样
  3. 和以前一样
  4. 和以前一样
  5. 转到“构建”标签
  6. 生成序列化程序集设置为打开
  7. 右键单击该项目,然后选择卸载项目
  8. 右键单击该项目,然后选择* edit nnn.csproj **
  9. 将以下代码段粘贴到某处

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

答案 1 :(得分:1)

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

在我以管理员运行Visual Studio后,我能够构建它。

参考:Gordon's 3log