2

C# プロジェクトで使用する必要があるサードパーティの C++ アセンブリがあります。したがって、C++ アセンブリ用の C++/CLI ラッパーを作成しました。私の開発マシンでは、すべてが正常にコンパイルおよび実行されます。

しかし、binディレクトリの内容を他のマシンの 1 つにコピーすると、クラッシュします。その理由は、C++/CLI-Wrapper アセンブリをロードできないためです。典型的なメッセージが表示されます:FileNotFoundException: Could not load file or assembly 'MyWrapperAssembly' or one of its dependencies.

そのため、いくつかの調査を行いました。 MyWrapperAssembly が見つからないことを確認し、アセンブリにイベント ハンドラーを追加しました。そのハンドラー内で、リフレクションのみのために MyWrapperAssembly をロードしました。次に、参照されているすべてのアセンブリをロードしました。MyWrapperAssembly のリフレクションのみの読み込みが機能します。だから、ファイルが見つかると確信しています。しかし、読み込もうとすると

Assembly.LoadFrom("hiddenDirectory\MyWrapperAssembly.dll");

上記のエラーでクラッシュしますFileNotFoundException: Could not load file or assembly 'MyWrapperAssembly' or one of its dependencies.

リフレクションのみのロードが機能したので、C++ レイヤーに何か問題があるに違いないと確信しました。開発マシンとテスト マシンにインストールされている C++ 再頒布可能パッケージのバージョンを比較したところ、いくつかのパッケージが欠落していることに気付きました。そこで、これらのパッケージをテスト マシンにダウンロードしてインストールしました。

そして、それはうまくいきませんでした。次に、6 台の異なる PC をテストしました。私のプログラムは 3 台の PC で実行され、他の 3 台ではクラッシュしMicrosoft Visual C++ 2010 Runtimeます。取り付けると、動作するようです。

しかし、インターネットでそのパッケージのインストーラーを見つけることができません。そこで、プログラムがクラッシュした 1 台の PC に Visual Studio 2013 をインストールしました。Visual Studio (および C++ ランタイム) をインストールすると、プログラムが実行されます。

したがって、その C++ ランタイムが必要だと思います。お客様の PC に Visual Studio を必要とするオプションはありません。そのため、C++ ランタイムをデプロイする必要があります。しかし、問題は次のとおりです。

Visual C++ ランタイムはどこから入手できますか?

または、私が別のものを見逃しているかどうか誰かが知っていますか?

4

2 に答える 2

1

ここから最新のランタイムを入手できます: The latest supported Visual C++ downloads .

少なくとも、C++/CLI プロジェクトのビルドに使用した VS バージョンと一致するものが必要です (VS2010 を使用する場合は、VC++ 2010 ランタイムが必要です)。

次に、ラップする C++ ライブラリに VC++ ランタイムも必要な場合は、それもインストールする必要があります。ライブラリ プロバイダーから依存関係が通知されているはずです。

サードパーティの.libファイルにリンクした場合は、コンパイルに使用したのと同じ VS バージョンを使用する必要があることに注意してください。そうしないと、2 つの異なるランタイムを同時に使用することになり、問題が発生する可能性があります。C++/CLI は管理された互換性のあるランタイムを使用する必要がありますが、バージョンが一致していれば問題が発生する可能性は低くなります。

于 2016-03-31T15:14:08.533 に答える
1

Visual Studio 2013 を使用している場合は、2010 ランタイムではなく、2013 ランタイムが必要です。

Visual Studio 2013 用の Visual C++ 再頒布可能パッケージ

于 2016-03-31T14:37:32.573 に答える