パブリックトークンの不一致により、ソースからのtSQLtプロジェクトの実行が失敗する


8

私はtSQLtフレームワークのいくつかの改善を試みており、ほとんど完了していますが、触れていない証明書に関連するいくつかのテストがまだ失敗しているため、それを行うことはできません。

 [exec] |18|[InstallExternalAccessKeyTests].[test creates correct certificate in master]                                                       |    120|Failure|
 [exec] |19|[InstallExternalAccessKeyTests].[test tSQLt can be set to EXTERNAL ACCESS after InstallExternalAccessKey executed]                 |    333|Failure|
 [exec] |20|[InstallExternalAccessKeyTests].[test tSQLtExternalAccessKey install data is signed with same key as tSQLt.clr]                    |     10|Failure|

失敗したエラーは次のとおりです。

Expected: %publickeytoken=8c9a92de0f9c7794,%
Actual: tsqltclr, version=1.0.7216.13228, culture=neutral, publickeytoken=8d3f4bf59e4c22fd, processorarchitecture=msil

インストールプロセスについて説明します。

以下のガイドラインを使用して、このフレームワークソースをインストールしました。ただし、次のエラーで失敗し、問題解決全体がそのSOポストで行われたため、その後プロジェクトを開始できませんでした。

[exec]
C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets(2482,5):エラーMSB3325:次のキーファイルをインポートできません:tSQLtOfficialSigningKey.pfx。鍵ファイルはパスワードで保護されている場合があります。これを修正するには、証明書を再度インポートするか、証明書を厳密な名前のCSPに次のキーコンテナー名で手動でインストールします。VS_KEY_C20B79DE0583A5C1 [E:\ Source \ tSQLt \ tSQLtCLR \ tSQLtCLR \ tSQLtCLR.csproj] [exec]
C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets(2482,5):エラーMSB3321:キーファイル「tSQLtOfficialSigningKey.pfx」のインポートがキャンセルされました。[E:\ Source \ tSQLt \ tSQLtCLR \ tSQLtCLR \ tSQLtCLR.csproj]

この問題を解決するために、パスワードなしですべてのプロジェクトに新しいキーを作成しました。

ここに画像の説明を入力してください

snkオリジナルではなく、ファイルが作成されたことがわかりますpfx。その後、私はもう一度ビルドを実行しようとしましたが、上記のエラーで失敗しました。


なぜtsqlフレームワークを使用するのですか?データベースコードには非常に多くのコードが含まれ、多くのSQL CLR関数が含まれています。私は、1年間に2つの大きなプロジェクトに使用しようとしたが、うまくいかなかった。.netまたは/およびSQLを使用して独自のテストを作成し、いくつかのツールを介してそれらを実行して、並列実行することをお勧めします。
gotqn

何のことを言っているのかよくわかりません。そこにはいくつかのSQL CLR関数しかありません。さらに、それは非常に安定しており、「ひどく失敗する」だけで奇妙に聞こえます。Redgateでさえ、このフレームワークを自社の製品に含めました。あなたはそれをググることができます、そして、それが今までのところ最高のユニットテストフレームワークであることがわかります。
Dmitrij Kultasev

私はそれが最高であることを知っていますが、それは良くありません。私はそれを何度も使用し、いくつかのオンラインデモンストレーションに参加し、拡張機能などを要求しましたが、最終的に独自のテストを作成することになりました。それは私のアドバイスです-このフレームワークに依存しないでください。
gotqn

私はすでに何年も使用していますが、大きなプロジェクトでも常にうまく機能しました。
Dmitrij Kultasev 19/11/11

回答:


0

述べたように たように

Microsoft Visual Studio 2008-2015のプロジェクトをビルドすると、次のエラーが発生する場合があります。

エラー次のキーファイルをインポートできません:mykey.pfx。鍵ファイルはパスワードで保護されている場合があります。

次のキーファイルをインポートできません:mykey.pfx。鍵ファイルはパスワードで保護されている場合があります。これを修正するには、証明書を再度インポートするか、証明書を厳密な名前のCSPに次のキーコンテナー名で手動でインストールしてください:VS_KEY_C1D3ACB8FBF1AGK4

解決策1:

[スタート]> [すべてのプログラム]> [Microsoft Visual Studio]> [Visual Studioツール]> [Visual Studioコマンドプロンプト]をクリックします。次のコマンドを入力します

sn -i "c:\Pathtofile\.pfx" VS_KEY_C1D3ACB8FBF1AGK4

:-iパラメータを指定したsn.exeは、指定されたキーコンテナにキーペアをインストールします。PFXファイルをVisual Studioに再インポートします。

解決策2:

  • プロジェクトのプロパティを開きます。

  • [署名]セクションをクリックします。

  • 「厳密な名前のキーファイルを選択してください」と表示されている場合は、ドロップダウンボックスから現在の値を再度選択します。
  • Visual Studioからパスワードの入力を求められます。入力してください。別のエラーメッセージが表示される場合があります。「存在しないトークンを参照しようとしました」>このメッセージは無視してください。

  • 「パスワードの変更」ボタンをクリックします

  • 3つのボックスすべてに元のパスワードを入力し、[OK]をクリックします。変更したい場合
  • パスワード(または、古いパスワードが複雑さの要件を満たしていない場合)は、今すぐ実行できます。
  • プロジェクトのキーファイルごとに繰り返します。プロジェクトを保存して、再構築します。

ソリューション3:

slproweb.comでwindows用のopensslのコピーを入手するか、Linuxボックスを使用してください。以下を実行してキーファイルにエクスポートします

openssl pkcs12 -in certfile.pfx -out backupcertfile.key

openssl pkcs12 -export -out certfiletosignwith.pfx -keysig -in backupcertfile.key

次に、プロジェクトのプロパティでPFXファイルを使用できます

ソリューション4:

この問題の最終的な解決策は、署名目的でVisual Studioをあきらめて、代わりにSigntoolを使用することです。

更新された回答

TFSビルドサービスアカウントには、ビルドエージェントマシンのsigningKey.pfxにアクセスするために必要な権限がないようです。最初にビルドエージェントマシンにこのファイルがあることを確認してください。

次に、以下の手順に従います。

  1. ローカルビルドサービスアカウントとしてビルドエージェントにログオンします(管理者権限が必要です)
  2. Visual Studioコマンドプロンプトを開き、キーが格納されているディレクトリに移動します。
  3. コマンドを入力sn –i signingKey.pfx VS_KEY_EFCA4C5B6DFD4B4Fします(エラーメッセージに表示されるキー名を使用していることを確認してください)
  4. パスワードの入力を求められたら、pfxファイルのパスワードを入力します

  5. その後、それを再構築します

注: Visual Studioを管理者として実行していない場合は、同様に実行してみてください。

Brandon Manchester からの回答を参照できる詳細情報 キーファイル 'blah.pfx'をインポートできません-エラー 'キーファイルはパスワードで保護されている可能性があります'


キーのパスワードがわからない
Dmitrij Kultasev '11

あなたはなにか考えはありますか?
Dmitrij Kultasev

1
あなたのケースで提供されるすべてのソリューションはパスワードを必要としました。持っていません。Sign the ClickOnce manifestsオフになっており、無効になっています。ローカルですべてを実行しようとしているので、アクセス許可の問題はありません(このコマンドラインを管理者のもとで実行しようとしました)
Dmitrij Kultasev

1
「3つのボックスすべてに元のパスワードを入力して[OK]をクリックします。パスワードを変更したい場合(または古いパスワードが複雑さの要件を満たしていない場合)、今すぐ変更できます。すでに述べたように、私にはパスワードがありません。
Dmitrij Kultasev

1
その例では、作成者はパスワードを知っていますが私は知りません
Dmitrij Kultasev
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.