0

ビルド サーバーで .NET ソリューション ビルドの一部として SGEN を呼び出すと、SGEN がエラーをスローする問題を解決しようとしています。サーバーのコマンドラインからビルドを実行して、CIサーバーを要因として排除しています。

表示される具体的なエラー メッセージは次のとおりです。

SGEN : エラー : ファイルまたはアセンブリ 'MyAssembly.dll、Version=0.0.0.0、Culture=neutral、PublicKeyToken=56e8273d901d717f' またはその依存関係の 1 つを読み込めませんでした。厳密な名前の検証に失敗しました。(HRESTULT からの例外: 0x013141A)

コマンド ラインからビルド スクリプトを実行しても、その他のエラーは発生しません。

問題のアセンブリは遅延署名されたアセンブリであり、指定されたトークンと一致する公開キーで構築されています。

サーバーでは、sn.exe ツール ( *,56e8273d901d717f) を使用して検証スキップ用のキー トークンを登録しました。これは、完全な署名段階が試行される前に、ビルド プロセスのテスト ステップの一部を実行するために必要なためです。

ビルド プロセスは、開発者のデスクトップと Win2K3 サーバーで正常に動作します。これらのテストは、古いボックスを置き換える新しい Win2k8R2 サーバーで実行しています。

4

1 に答える 1

1

問題は sn.exe ツールにあります。

サーバーに検証スキップ エントリを追加しましたが、SGEN ツールはこれを確認していませんでした。これは、SGEN ツールが64 ビット プロセスとして実行され、sn ツールが32 ビットバージョンであったためです (64 に存在するにもかかわらず)。ビット「Program Files」フォルダ)。

  • 32 ビットの sn.exe は、C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\sn.exe にあります。
  • 64 ビットの sn.exe は、C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64\sn.exe にあります。

これらの 2 つのツールは、完全に独立したレジストリに書き込みます。マシン上の .NET インストールの "ビットネス" と呼び出される exe の "ビットネス" に応じて、いずれかに検証を追加する必要があります。

64 ビットの sn.exe でエントリを登録すると、問題が解決しました。

于 2012-08-06T14:46:41.040 に答える