2 台のマシン。.NET 3.5 と VS 2008 VC++ SP1 再頒布可能パッケージの両方
C++/CLI と C# の 2 つの署名付き DLL を使用する単一の exe ファイル
1 台のマシンで exe が読み込まれ、正常に実行されます。
一方、C++ 実行可能ファイル (HRESULT 0x8013141A) で「厳密な名前の検証に失敗しました」というメッセージが表示されます。
何か案は?
2 台のマシン。.NET 3.5 と VS 2008 VC++ SP1 再頒布可能パッケージの両方
C++/CLI と C# の 2 つの署名付き DLL を使用する単一の exe ファイル
1 台のマシンで exe が読み込まれ、正常に実行されます。
一方、C++ 実行可能ファイル (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
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 のソース コード コピーに対してデバッグを行っているときに、この問題に遭遇しました。