10

いくつかの VC++ DLL に問題があり、.NET/C# プロジェクトに含める必要があります。1 つの VC++ DLL は C++/CLI DLL で、.NET プロジェクトからパブリック インターフェイスとして使用します。他の DLL はネイティブ C++ で記述されています。VC++ DLL のソースにはアクセスできません。使用するしかありません。

.NET テスト プロジェクトを作成し、C++/CLI DLL を参照しました。問題ありません。コンパイラは幸運です。1 つだけ問題があります。.NET プログラムの EXE を起動すると、VC++ コア DLL が見つからないため、C++ DLL に関するエラーが発生します。sxstrace は次のように表示します (短縮):

INFO: Reference: Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
INFO: Reference: Microsoft.VC80.OpenMP,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
INFO: Resolving reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
...
ERROR: Cannot resolve reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195".

今、私はばかではなく、いくつかのことを試しました。何が起こっているのかをより深く理解するために、WinSxS について多くのことを読みました。今、私はそれが私にとってうんざりしているポイントにいます。プログラムを実行したいシステムには、現在のバージョン 8.0.50727.762 (SP1) の VC++ Redistributable パッケージがインストールされています。このアセンブリのすべてのバージョンを現在のバージョン 8.0.50727.762 にリダイレクトする winsxs の Microsoft.VC80.CRT 用のポリシー ファイルがあることを知っています (これがhttp://blogs.msdn.com/b/nikoladの問題の解決策です)。 /archive/2007/03/29/a-solution-to-two-references-to-different-versions-of-crt-mfc-atl-in-one-application-manifest-file.aspx)。しかし、上記のエラーが示すように、このポリシー ファイルは機能していないように見えるか、考慮されていません。システムは、アセンブリの 8.0.50727.6195 バージョンを見つけたいだけです。

これが最初の質問です。ここでの問題は何ですか? これを理解した後、最初の問題を解決できました...

4

1 に答える 1

9

わかりました、これで動作します - ご協力ありがとうございます。

解決しなければならない2つの問題を見つけました。

1) VC++ アセンブリのバージョン 8.0.50727.6195 を展開する "Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package MFC Security Update" をインストールする必要がありました。この更新プログラムは Microsoft サーバーで見つけるのが困難だったので、リンクを次に示します: http://www.microsoft.com/download/en/details.aspx?id=26347 通常、8.0.50727.762 バージョン ("Visual C++ 2005 Service Pack 1 Redistributable Package)、これは古くなっています。C++ DLL は 6195 に対してコンパイルされているため、更新プログラムをインストールすると最初の問題が解決されました。

2) C++/CLI DLL はリリース モードでコンパイルされましたが、以下のネイティブ C++ DLL はデバッグ モードで提供されていました。現在、Microsoft ライセンス契約は VC++ デバッグ DLL の展開を禁止しており、VC++ Redist パッケージには VC++ デバッグ DLL が含まれていません。 http://msdn.microsoft.com/en-us/library/aa985618.aspx言います:

アプリケーションのデバッグ バージョンは再配布できず、さまざまな Visual C++ ダイナミック リンク ライブラリ (DLL) のデバッグ バージョンはどれも再配布できません。

解決策: ネイティブ C++ DLL の開発者がリリース バージョンを提供してくれたので、すべて正常に動作しました...

于 2012-02-06T08:59:13.740 に答える