Visual Studio 2008プロジェクトをVisual Studio 2010にアップグレードしました。すべてのアセンブリは、 Verisign のコード署名証明書を使用して強力に署名されています。アップグレード以降、継続的に次のエラーが発生しました。
次のキーファイルをインポートできません:companyname.pfx。鍵ファイルはパスワードで保護されている場合があります。これを修正するには、証明書を再度インポートするか、次のキーコンテナ名を使用して証明書を厳密名CSPに手動でインストールします。VS_KEY_3E185446540E7F7A
これは一部の開発者のマシンで起こり、他のマシンでは起こりません。この問題を解決するために使用されるいくつかの方法は、次のようなものを含みます。
エラーメッセージが示すように SN.EXE ユーティリティ(厳密名ツール)を使用して厳密名CSPにキーを登録しようとしましたが、私はVisual Studio 2010に同梱されているバージョンを使用して任意のオプションを指定してツールを実行します。SN.EXEは何もせずにコマンドライン引数を一覧表示するだけです。これは私がどんな引数を指定しても関係ありません。
なぜこれが起こっているのか、そしてそれを修正するための明確なステップは何ですか?私は ClickOnce のインストールとMicrosoftのコード署名をあきらめようとしています。
私もこの問題に遭遇しました。実行することで問題を解決できましたsn -i <KeyFile> <ContainerName>
(は、キーペアを名前付きコンテナにインストールします。
sn
は通常、Windows SDKの一部としてインストールされます。例えばC:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe
です。ほとんどの場合、この場所は標準環境の検索パス上にはありません。ただし、Visual Studioによってインストールされた「Developer Command Prompt」が通常正しい場所を含む追加情報を追加します。
あなたの投稿に基づいて
sn -i companyname.pfx VS_KEY_3E185446540E7F7A
これは、PFXファイルの場所から実行する必要があります。ソリューションをVS 2010にロードしている場合は、ソリューションエクスプローラーからpfxファイルを右クリックし、Openコマンドプロンプトを選択して.net 2010 cmdプロンプトツールを起動します。正しいディレクトリ.
このsnコマンドを実行する前に、私はそれを右クリックしてインストールを選択することによってpfxを再インストールしました、しかしそれはうまくいきませんでした。それが解決策を提供したのは両方の組み合わせかもしれないので注意すべきこと。
これがあなたの問題解決に役立つことを願っています。
私はあなたがマルチ開発者環境でうまく構築できるようにする修正を発見しました:
パスワードを変更する代わりに(.pfxが変更される)、コンボボックスから.pfxファイルを選択し直します。これにより、パスワードダイアログが表示されます。パスワードを入力すると、プロジェクトは正常に構築されます。すべての開発者は、実際には.pfxファイルを変更することなく、自分のローカルマシンでこれを実行できます。
私たちのビルドサーバーマシンでアセンブリを署名させるのにはまだ問題があります。同じエラーが表示されますが、sn.exe -iメソッドを使用してもbuildserverの問題は解決されません。
私は同じ問題を抱えていたし、店を削除して読んでもうまくいきませんでした。私は次のことをしなければなりませんでした。
OpenSSL のコピーを入手してください。 Windowsで利用可能です。あるいは、ほとんどすべての人がLinuxボックスを持っているので、Linuxボックスを使用してください。
以下を実行してキーファイルにエクスポートします。
openssl pkcs12 -in certfile.pfx -out backupcertfile.key
openssl pkcs12 -export -out certfiletosignwith.pfx -keysig -in backupcertfile.key
その後、プロジェクトのプロパティで、PFXファイルを使用できます。
私はあまりにも早く話しました!再構築するとエラーが発生します。
私はこれがうまくいった - Solution Explorer を右クリックしてプロジェクトから除外します。クリックすべてのファイルを表示して右クリックし、もう一度プロジェクトに含めます。保留中の変更を元に戻します...
何らかの理由でこれは私のためにそれを整理し、比較的痛みがなかった!
VSCommands 2010(Visual Studio用のプラグイン)はこれを自動的に修正できます - エラーを右クリックしてメニューからApply Fixをクリックします。あなたは Visual Studioのギャラリー からそれを入手することができます。
場合によっては、このキーを削除するようにしてくださいあなたはそれをインストールします。それで、以下をしてください:
sn -d VS_XXXX
sn -i mykey.pfx VS_XXX
これらすべての解決策(そしてそれ以上のもの)を試した後、私は問題がどこか別の場所にあることを知りました。証明書を購入した後に私と同じ悲惨さを経験する人々のために、私は私の問題に対する解決策を共有します。
動作
'sign'はDLLやEXEにauthenticodeではなく厳密な名前を適用することを理解しています。この場合、signtoolはは動作しますが、Visual Studioの 'sign'は機能しません。
理由
過去にVerisignの証明書を使った経験があります。証明書にはKeySpec=2
があります。これは、Visual Studioの「署名」機能で使用されます。これらの証明書は、Visual Studioとsigntoolの両方で正常に機能します。
私は今、Comodoから証明書を購入しました。それはコード署名証明書に間違ったKeySpec=1
を持っています。つまり、これらの証明書はsigntool(authenticode)では正常に機能しますが、厳密な命名(サインドロップダウン)では機能しません。
解決策
この問題を解決するには2つの方法があります。
sn -k [name].snk
を使用してあなたの厳密な名前のための別の証明書を作成してください。 snkを使用してアセンブリに署名し、その後signtoolをコード署名証明書と共に使用して、authenticode署名を使用してDLL/EXEに署名します。これは奇妙に思えますが、私が理解していることから、これは証明書を扱う正しい方法です。厳密な名前はauthenticodeとは目的が異なるためです(これがどのように機能するかについての詳細は this link も参照)。KeySpec=2
としてインポートします。これに関する手順は ここで詳しく説明されています 。私は複数の厳密な名前を使いたいので、私は現在オプション(1)を使用していますが、オプション(2)も機能します。
この解決策が将来紛失しないようにするために、解決策2の手順を次に示します。
KeySpec=1
)をPFXファイルにエクスポートします。注:このファイルを安全な場所にバックアップし、本当に安全に再生したい場合は、そのファイルを別のマシンに正しくインポートできるかどうかをテストしてください。certutil -importPFX -user <pfxfilename> AT_SIGNATURE
KeySpec=2
のキーセット/証明書があります。必要に応じて、もう一度MMCを使用してこれを別のPFXファイルにエクスポートできます。
Visual Studio 2012でこの問題を解決するには、プロジェクトを右クリックし、[プロパティ] - > [署名]をクリックして、[ClickOnceマニフェストに署名する]チェックボックスをオフにします。
[厳密な名前のキーファイルを選択]ドロップダウンボックスでキー(pfx)ファイルを選択し、[パスワードの入力]ポップアップウィンドウにパスワードを入力しました。プロジェクトを保存し、rebuild.buildが成功しました。
プロジェクトを保存して再構築します。
「存在しないトークンを参照しようとしました」というエラーメッセージが表示された場合は、無視して次の手順に進みます。
[パスワードの変更]ボタンをクリックしてください。
3つすべてのボックスに元のパスワードを入力し、[OK]をクリックします。パスワードを変更したい場合(または古いパスワードが複雑さの要件を満たしていない場合)は、今すぐ変更できます。
プロジェクトを保存して再構築します。
回避策として、私は管理者としてVisual Studio 2010を実行しようとしました、そしてそれは私のために働きました。
これが役に立つことを願っています。
Connect bugレポートの回避策の最初の作者として、このメッセージには2つの変種があります(後で発見しました)。
1つの方法では、sn.exeを使用して(通常、厳密な名前付けをしている場合)、厳密な名前付けストアにキーをインポートします。
Certmgrを使用してインポートするもう1つの方法は、クリックワンス展開などのコード署名をしている場合です(両方の目的で同じ証明書を使用できます)。
お役に立てれば。
何もうまくいきませんでしたが、それから私は行って証明書マネージャ(mmc.exe)を調べました。証明書は個人用ストアにインポートされなかったため、手動でインポートしてからプロジェクトをコンパイルしました。
「Visual Studio Project Designerの署名ページを使用したClickOnceマニフェストの署名および厳密な名前のアセンブリの署名、アセンブリの署名」を参照してください。 。
私の問題は、TFS Build Controllerがネットワークサービスとして実行されていたことと、何らかの理由でVisual Studio Build Hostサービス証明書が使用されていない理由を理解できなかったことです。私は、Visual Studio BuildサービスのIDをより管理しやすいものに変更し、それがTFSサーバーに対する権限を持っていることを確認し、そしてMMCを使用して手動で証明書を追加しました。
MSBuildがパスワードで保護された証明書をストアに追加できないという問題もありました。
コンボボックスでキーファイルを選択し直してパスワードを入力すると、これが役に立ちます。
しかし、キーファイルが変更されるたびに実行する必要があり、それは問題ないようです。
さて、これは私のために働いた。 Visual Studio 2010で管理者として古いソリューション/プロジェクトを開き、新規またはコピーしたソリューション/プロジェクトを開きます。管理者として、新しいVisual Studio 2010ソリューション/プロジェクト内のコピーしたpfkファイルを削除し、プロジェクトのプロパティに移動して選択解除します。
両方のプロジェクトを開いた状態で、新しいものにコピーペーストします。プロジェクトのプロパティに移動して[ビルド]を選択します。私はVisual Studioを開いたり閉じたりしました。また、新しいプロジェクトから削除した後で、古いプロジェクトからコピーして選択しました。プロジェクトをコピーしてビルドしようとしたときに、最初にこの記事の冒頭でエラーを受け取りました。
私は似たような問題を抱えていましたが、 "厳密な名前のキーファイル" ComboBoxでpfxを選択してパスワードを入力した後、私はまだ似たようなエラーを受けました(コンテナ名の部分なし)
次のキーファイルをインポートできません:companyname.pfx。鍵ファイルはパスワードで保護されている場合があります。これを修正するには、証明書を再度インポートするか、手動で証明書をインストールしてください。
また、「Sign the ClickOnceマニフェスト」証明書情報パネルには入力されていませんでした。
私のPFXで「ファイルから選択...」を実行し、問題が解決しました。
私のシナリオでは、ビルドサービスは、sn.exe
を使用してキーをインポートしたのと同じユーザーアカウントを使用していませんでした。
アカウントを自分の管理者アカウントに変更した後は、すべて正常に機能しています。
ここで説明されているすべての方法は役に立ちませんでした。しかし、*。pfxファイルを自分のプロジェクトから削除してアセンブリの署名に再度追加すると、エラーなしで自分のプロジェクトをビルドできました。理由は説明できません。しかし、それは私のために働いた。
これは私の問題を解決しました:あなたのVSプロジェクトを開く
Package.appxmanifestをダブルクリック
[梱包]タブに移動します
証明書の選択をクリック
証明書の設定をクリックします
ファイルから選択し、その団結か他のものを作成したexample.pfxを使用してください
同じエラーが発生しました。私の場合、上記のすべてを試しましたが、結果を得ることができませんでした。
私の場合、エラーの原因は、証明書のパスワードが入力されていないか、正しく入力されていなかったことが最終的にわかりました。パスワードを動的に正しく入力すると、エラーは消えました。成功した
私は自分自身でこの問題を解決し、Visual Studioプロジェクトの.csprojファイルの次の行を変更しました。
これは 'インポートできない'というエラーを投げました:
<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>
値をfalseに変更するとエラーは消えました。