3

アンマネージC++dllがあり、マネージC ++ / CLIラッパー.dllによって使用され、最終的にC#プロジェクトによって使用されます。

C#プロジェクトには厳密な名前が付けられているため、ラッパーの.dllも同様です。/ KEYFILEを使用して、アンマネージdllに対して同じことを実行しようとしましたが、機能しないようです。そしてラッパーは不平を言っています:

.... is a strong-name signed assembly and embedding a manifest invalidates the signature

アンマネージC++に厳密な名前を付ける必要がありますか?そうでない場合、どうすればこの問題を解決できますか?

4

2 に答える 2

4

つまり、私の C# アプリはネイティブ C++ dll のクラスを呼び出す C++/CLI ラッパー dll を呼び出します。

この問題を解決するために:

mt.exe : general warning 810100b3: ... MyWrapper.dll is a strong-name signed assembly and embedding a manifest invalidates the signature. You will need to re-sign this file to make it a valid assembly.

重要: 参照されたクラスの厳密な名前は問題ではなかったことが判明しました。

この場合、VS がラッパー DLL に署名する方法に問題があることがわかりました。リンクを参照してください: http://blogs.msdn.com/b/vcblog/archive/2011/03/11/10140139.aspx

つまり、これを解決するには、ラッパー C++ クラスで、これを Post Build コマンドとして追加して再署名します。

sn.exe -R $(SolutionDir)$(Configuration)\MyWrapper.dll MyKeyFile.snk
于 2012-07-19T18:32:36.660 に答える
3

ネイティブ DLL に厳密な名前を付けることはできません。何よりも、そうすることは無意味であるため、CLR だけが厳密な名前を検証し、.NET アセンブリでのみ検証します。

念のため: 厳密な名前は、コード署名証明書の代わりにはなりません。最大のヒントは、大金を誰かに渡す必要がないからです。

于 2012-07-18T23:56:39.763 に答える