406

Visual Studio 2008 プロジェクトを Visual Studio 2010 にアップグレードしたばかりです。すべてのアセンブリは、Verisignコード署名証明書を使用して強力に署名されています。アップグレード以来、次のエラーが継続的に発生します。

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

これは一部の開発者マシンで発生し、他のマシンでは発生しません。これを修正するために使用されるいくつかの方法には、次のようなものがあります。

  • Windows エクスプローラーからキー ファイルを再インストールします (PFX ファイルを右クリックし、[インストール] をクリックします)。
  • 新しいマシンに初めて Visual Studio 2010 をインストールすると、プロジェクトを初めて開いたときにパスワードの入力を求められますが、その後は機能します。Visual Studio 2008 からアップグレードされたマシンでは、このオプションは表示されません。

エラー メッセージが示すように、 SN.EXEユーティリティ (Strong Name Tool) を使用して、Strong Name CSP にキーを登録しようとしましたが、Visual Studio 2010 に付属のバージョンを使用してオプションを指定してツールを実行すると、常に SN. .EXE は、何もせずに、コマンド ライン引数を一覧表示するだけです。これは、私が提供する引数に関係なく発生します。

なぜこれが起こっているのか、それを修正するための明確な手順は何ですか? ClickOnceインストールと Microsoft コード署名をあきらめようとしています。

4

25 に答える 25

469

私もこの問題にぶつかっていました。を実行することで問題を解決できました
sn -i <KeyFile> <ContainerName>名前付きコンテナーにキーペアをインストールします)。

sn通常、WindowsSDKの一部としてインストールされます。たとえばC:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe。ほとんどの場合、この場所は標準環境の検索パス上にありません。ただし、Visual Studioによってインストールされる「開発者コマンドプロンプト」は、通常は正しい場所を含む追加情報を追加します。

あなたの投稿に基づいて、次のようになります

sn -i companyname.pfx VS_KEY_3E185446540E7F7A

これは、PFXファイルの場所から実行する必要があります。ソリューションをVS 2010にロードしている場合は、ソリューションエクスプローラーからpfxファイルを右クリックし、[コマンドプロンプトを開く]を選択すると、.net2010コマンドプロンプトツールが起動します。正しいディレクトリ。

このsnコマンドを実行する前に、pfxを右クリックしてインストールを選択することで、pfxを再インストールしましたが、機能しませんでした。解決策を提供したのは両方の組み合わせである可能性があるため、注意が必要です。

これがあなたの問題の解決に役立つことを願っています。

于 2010-05-14T20:52:35.893 に答える
135

マルチ開発者環境でのビルドを成功させるのに役立つ修正を発見しました。

パスワードを変更する (.pfx が変更される) 代わりに、コンボボックスから .pfx ファイルを再度選択しますこれにより、パスワード ダイアログが呼び出されます。パスワードを入力すると、プロジェクトは正常にビルドされます。すべての開発者は、実際に .pfx ファイルを変更することなく、自分のローカル マシンでこれを行うことができます。

ビルド サーバー マシンでアセンブリに署名するのにまだ問題があります。そこでも同じエラーが発生しますが、sn.exe -i メソッドを使用してもビルドサーバーの問題は解決しません。

于 2010-07-07T15:01:16.377 に答える
47

同じ問題があり、ストアと読み取りを削除しても機能しませんでした。私は次のことをしなければなりませんでした。

  • OpenSSLのコピーを取得します。Windowsで使用できます。または、Linuxボックスを使用してください。ほとんどすべてがLinuxボックスを備えています。

  • 次のコマンドを実行して、キー ファイルにエクスポートします。

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

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

于 2011-11-15T01:05:49.767 に答える
38

話すのが早すぎた!再構築すると、エラーが元に戻ります...

これが機能することがわかりました-ソリューションエクスプローラーで右クリックして、プロジェクトから除外します。Show all filesをクリックし、右クリックしてプロジェクトに再度含めます。保留中の変更を取り消す...

何らかの理由で、これは私のためにそれを整理し、比較的痛みがありませんでした!

于 2011-07-27T13:40:45.737 に答える
37

場合によっては、インストールする前にこのキーを削除してみてください。したがって、次のようにします。

  1. sn -d VS_XXXX
  2. sn -i mykey.pfx VS_XXX
于 2011-06-22T16:53:25.120 に答える
31

VSCommands 2010(Visual Studio用のプラグイン)はこれを自動的に修正できます。エラーを右クリックして、メニューから[修正の適用]をクリックするだけです。VisualStudioギャラリーから入手できます。

于 2010-08-08T09:26:53.297 に答える
6

回避策として、Visual Studio 2010 を管理者として実行してみましたが、うまくいきました。

これが役立つことを願っています。

于 2010-05-25T15:59:15.403 に答える
4

接続バグ レポートの回避策の元の作成者として、このメッセージには 2 つのバリエーションがあります (後で発見しました)。

1 つの亜種では、sn.exe を使用して (通常、厳密な名前付けを行っている場合)、キーを厳密な名前付けストアにインポートします。

certmgr を使用してインポートするもう 1 つのバリアントは、クリック 1 回の展開などのコード署名を行う場合です (両方の目的で同じ証明書を使用できることに注意してください)。

お役に立てれば。

于 2010-05-20T21:52:41.730 に答える
3

何もうまくいきませんでしたが、証明書マネージャー (mmc.exe) を調べました。証明書は個人ストアにインポートされていないため、手動でインポートしてからプロジェクトをコンパイルしました。

ClickOnce マニフェスト署名および Visual Studio プロジェクト デザイナーの署名ページを使用した厳密な名前のアセンブリ署名、アセンブリの署名を参照してください。

于 2012-05-19T13:22:51.050 に答える
2

同様の問題がありましたが、「厳密な名前のキー ファイル」ComboBox で pfx を選択してパスワードを入力した後も、同様のエラーが発生しました (コンテナー名の部分はありません)。

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

また、"ClickOnce マニフェストに署名する" 証明書情報パネルにはデータが入力されていませんでした。

pfxで「ファイルから選択...」を実行したところ、問題は解決しました。

于 2011-11-23T23:18:51.897 に答える
2

コンボボックスでキーファイルを再選択してパスワードを入力すると、これに役立ちます。

しかし、キーファイルが変更されるたびに行う必要があり、それは問題ないようです。

于 2011-12-23T11:08:58.200 に答える
2

Windows インストールをSSDに移動した後、同じ問題が発生しました。他の解決策はどれもうまくいきませんでした。

私の解決策は、プロジェクト ファイルをメモ帳で開き、PFX キーへのすべての参照を削除することでした。ファイルが保存されたら、Visual Studio でソリューションを開きます。プロジェクト -> プロパティ -> 署名に移動します。[厳密な名前のキー ファイルを選択] コンボ ボックスにキーが表示されないはずです。コンボ ボックスでキーを参照して選択すると、プロジェクトをビルドできるようになります。

于 2011-08-10T12:17:23.053 に答える
2

私の問題は、TFS ビルド コントローラーがネットワーク サービスとして実行されていて、何らかの理由で Visual Studio ビルド ホスト サービス証明書が使用されていない理由がわからなかったことです。Visual Studio ビルド サービスの ID をより管理しやすいものに変更し、TFS サーバーに対する権限があることを確認し、MMC を使用して手動で証明書を追加しました。

問題は、MSBuild がパスワードで保護された証明書をストアに追加できないことでもありました。

于 2012-01-12T12:06:53.573 に答える
1

ここで説明されているすべての方法は役に立ちませんでした。しかし、プロジェクトから *.pfx ファイルを削除し、それをアセンブリの署名に再度追加すると、エラーなしでプロジェクトをビルドできました! 理由を説明することはできません。しかし、それは私にとってはうまくいきました。

于 2013-03-20T06:50:58.550 に答える
1

さて、これは私のために働いた。Visual Studio 2010 で管理者として古いソリューション/プロジェクトを開き、新しいまたはコピーしたソリューション/プロジェクトを開きます。管理者として、新しい Visual Studio 2010 ソリューション/プロジェクトでコピーした pfk ファイルを削除し、プロジェクトのプロパティに移動して選択を解除します。

両方のプロジェクトを開いた状態で、コピーして新しいプロジェクトに貼り付けます。プロジェクトのプロパティに移動し、[ビルド] を選択します。私はVisual Studioを開いて閉じ、新しいプロジェクトから削除した後、古いプロジェクトからコピーして選択する前にビルドしました。プロジェクトをコピーしてビルドしようとしたときに、この投稿の最初にエラーを受け取りました。

于 2011-04-15T02:09:25.077 に答える
1

残念ながら、ここで言及されているアプローチは私にとってはうまくいきませんでした。いくつかの PFX を Docker コンテナーに登録する必要があり、コマンド ライン経由でパスワードを渡す必要があります。

そこで、 RSACryptoServiceProvidersn.exe -i <infile> <container>を使用して C# でコマンドを再開発し ました。ソースとアプリは GitHub のSnInstallPfxプロジェクトにあります。

SnInstallPfxアプリは、PFX キーとそのパスワードを受け入れますキー コンテナー名 (VS_KEY_*) を自動的に計算し (MSBuild ソース コードから借用)、厳密な名前の CSP にインストールします。

使用法:

SnInstallPfx.exe <pfx_infile> <pfx_password>
// or pass a container name if the default is not what you need (e.g. C++)
SnInstallPfx.exe <pfx_infile> <pfx_password> <container_name>
于 2019-11-27T16:46:52.430 に答える
0

Visual Studio プロジェクトの .csproj ファイルの次の行を変更して、この問題を自分で解決しました。

これにより、「インポートできません」というエラーがスローされました。

<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>

値を false に変更すると、エラーがなくなりました。

于 2015-02-19T15:05:23.217 に答える
0

同じエラーが発生しました。私の場合、上記のすべてを試しましたが、結果が得られませんでした。

私の場合、エラーの理由は、証明書のパスワードが入力されていないか、間違って入力されたことが原因であることに最終的に気付きました。パスワードを動的に正しく入力すると、エラーが消えました。成功

于 2019-07-15T12:10:32.520 に答える
0

Visual Studio 2019 と .Net 5 プロジェクトでは、この問題の解決策は、ソリューションから .pfx ファイルを除外するだけで、すぐに機能しました。

于 2021-04-26T12:16:38.243 に答える