5

sgenツールを使用してアセンブリを作成する署名付きクラスライブラリがあります。ただし、次のコマンドを実行しようとするとエラーが発生します。

$ sgen.exe /a:testsign.dll / force /compiler:/keyfile:..\..\testsign.pfx / verbose / n
エラー:一時クラスを生成できません(結果= 1)。
エラーCS1548:アセンブリの署名中に暗号化エラーが発生しました'[... path ...]\TestSign.XmlSerializers.dll'-'アセンブリの署名エラー---パラメータが正しくありません。'

さらにヘルプが必要な場合は、「sgen /?」と入力してください。

私はMSDNで次のようなエラーを確認しました

CS1548は、アセンブリの署名が失敗したときに発生します。これは通常、無効なキーファイル名、無効なキーファイルパス、または破損したキーファイルが原因です。

ただし、キーを作成したばかりで、パスは正しく、私の知る限り、VisualStudio2010は破損したキーを作成しません。

この問題の再現はかなり簡単です。

  1. ここに貼り付けたコードを使用して、新しいクラスライブラリを作成します。
  2. class TestSigning1つと1つの2つのクラスを作成しますclass Model
  3. [プロジェクトのプロパティ]>[署名]に移動し、[このアセンブリに署名する]を確認します
  4. 新しい厳密な名前のキーファイルを作成します
  5. Visual Studioコマンドプロンプトを開く(2010)
  6. dllを見つけて実行しますsgen /a:<dllname> [... as above ...]

私の推測では、キーファイルの公開キーを使用していると思います。しかしsgen、キーファイルを保護するために使用したパスワードをどのように通知するかについての情報源は見つかりません。

どうすればいいのかわかりません。私がここでSOで見た他のスレッドには、同じエラー「ヘッダー」unable to generate temporary classがありますが、エラーの詳細が異なり、Cryptographic failure(私が見つけた)スレッドはありません。

4

2 に答える 2

3

このスレッドの指示に従うと、この問題は解決しました。ツールを使用して手動で実行したわけではありませんが、sgenVisualStudioを介して実行しました。

つまり、上記の例は次のように変更されます。

  1. 従来通り
  2. 従来通り
  3. 従来通り
  4. 従来通り
  5. [ビルド]タブに移動します
  6. [シリアル化アセンブリの生成]を[オン]に設定します
  7. プロジェクトを右クリックして、[プロジェクトのアンロード]を選択します
  8. プロジェクトを右クリックして、* editnnn.csproj**を選択します
  9. 次のスニペットをどこかに貼り付けます

    <PropertyGroup>
        <SGenUseProxyTypes>false</SGenUseProxyTypes>
        <SGenPlatformTarget>$(Platform)</SGenPlatformTarget>
    </PropertyGroup>
    
  10. プロジェクトをリロードしてビルドします。

于 2012-06-21T08:50:11.213 に答える
1

当初、私は問題なくプロジェクトを構築することができました。別の単純なプロジェクトをビルド/公開できず、代わりにこのエラーをスローしたときは、かなり奇妙でした。

Visual Studioを管理者として実行した後、これを構築できました。

参照:ゴードンの3ログ

于 2014-03-07T09:15:43.940 に答える