5

我有一个签名的类库,我想通过 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. 使用此处粘贴的代码创建一个新的类库。
  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(我发现)。

4

2 回答 2

3

按照这个线程中的说明解决了这个问题。尽管不是使用该sgen工具手动完成的,但它是通过 Visual Studio 完成的。

也就是把上面的例子改成:

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

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

于 2012-06-21T08:50:11.213 回答
1

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

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

参考:戈登的3log

于 2014-03-07T09:15:43.940 回答