2台のマシン。 .NET 3.5とVS 2008 VC++ SP1再頒布可能ファイルの両方
C++/CLIとC#の2つの署名付きDLLを使用する単一のexe
Exeは1台のマシンで正常にロードおよび実行されます。
もう1つは、C++実行可能ファイルで「Strong Name Validation Failed」が表示される(HRESULT 0x8013141A)
何か案は?
管理者としてコマンドプロンプトを開き、次のコマンドを入力します。
reg DELETE "HKLM\Software\Microsoft\StrongName\Verification" /f
reg ADD "HKLM\Software\Microsoft\StrongName\Verification\*,*" /f
reg DELETE "HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification" /f
reg ADD "HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification\*,*" /f
コマンドプロンプト管理者としてを開き、次のコマンドを入力します。
"C:\ Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\sn.exe" -Vr <dllpath>
引数は大文字と小文字が区別されることに注意してください。詳細なソース: http://blogs.msdn.com/b/keithmg/archive/2012/03/20/strong-name-validation-failed-exception-from-hresult-0x8013141a.aspx =
64ビットマシンでは、64ビットバージョンのsn.exeを使用する必要があります。 (C:\ Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\sn.exe)
ある段階で "sn.exe -Vr AssemblyName.dll"を実行した可能性がある "開発"マシンでコードが実行されるコードであり、遅延署名されたアセンブリを完全に署名されているかのように使用できます。遅延署名されたアセンブリを別のマシンに転送して実行すると、完全に署名されていないため、厳密な名前の検証に失敗します。
私の場合、Visual Studio 2015
で同じ問題が発生し、すでに議会に署名していました。
この方法で修正しました:問題の原因となるプロジェクトを右クリックします->「プロパティ」->「ビルド」->「プラットフォームターゲット」フィールドの値を変更します。
私はそれをAny CPU
からx86
に変更する必要がありましたが、プロジェクトとライブラリの機能で失敗している場合は、その値をx64
に変更する必要があると思います。
Visual Studioの新しいバージョンでSN.EXEが見つかりません。 Visual Studio 2012では、「Visual Studio 2012の開発者コマンドプロンプト」を使用する必要があります。次に、コマンド「sn」を実行します。
構文:sn -Vr *、2d58152b8e842be2
ここで、「2d58152b8e842be2」は、エラーメッセージに表示される公開鍵トークンです。どういうわけかこれだけでは私の問題は解決しませんでした。
プロジェクト設定->署名->に移動し、「アセンブリに署名する」のチェックを外すことで、開発時にこれを回避できる場合があります。
Entity Frameworkのソースコードコピーに対してデバッグしているときに、今日これに遭遇しました。
プロジェクトを右クリック→プロパティ→ビルドタブ→プラットフォームターゲット→「x64」を選択
私は今日これに遭遇し、偶然出会った http://timgeerts.blogspot.co.uk/2009/08/strong-name-validation-failed.html が解決策のようです。
オプション1)コードカバレッジをオフにします(VS 2010では、[テスト設定]-› [データと診断]-> [コードカバレッジ]の横の[有効]チェックボックスをオフにします)。
オプション2)署名キーファイルをコードカバレッジ構成に追加します(VS 2010では、[テスト設定]-› [データと診断]-› [コードカバレッジ]を選択し、上部にある[構成]をクリックします。これは "keyFile"属性に対応します) .testsettingsファイルのCodeCoverageタグの場合)
VS 2012では、コードカバレッジはデフォルトで有効になっています。これは、適切な除外を指定した.runsettingsファイルで無効にできます。詳細およびサンプルファイルについては、 http://msdn.Microsoft.com/en-us/library/jj159530.aspx を参照してください。オプション2の場合、.runsettingsファイルで使用できる明示的な設定がないようですが、署名(YMMV)に関しては自動的に正しいことが行われているようです。ただし、VS 2010の.testsettingsファイルを参照している場合は、上記のように編集する必要があります。
ビルドメニュー(上部ペイン)に移動してこれを修正し、ソリューション全体をビルドするのではなく、その特定のプロジェクトに対してのみ「xxxProject.pluginを再ビルド」と言います。
VS.Net Ultimate 2012を使用しています
そしてこの解決策は私を助けました:
[プロジェクト]-> [プロパティ]-> [ビルド]タブを右クリックし、[シリアル化アセンブリを生成]をオフに切り替えます->完了