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++ ランタイムはどこから入手できますか?
または、私が別のものを見逃しているかどうか誰かが知っていますか?