2016-11-23 6 views
1

私のアプリケーションでは、Pinvokeを使用してwin32 dllで定義された関数を呼び出すアクターがあります。私はまた、これらの俳優を呼び出すフロントエンドWebサービスを持っています。PInvokeを使用してAzure Service Fabricでdllをロードする

これをローカルで実行すると、すべて正常に動作します。 win32のDLLが見つけられ、正しく読み込まれ、私の俳優はそこから関数を呼び出すことができます。

しかし、ソリューションをAzureにデプロイすると、アクターがdllを読み込もうとすると内部サーバーエラーが発生します。 Theresは説明的なエラーがないので、俳優がdllを見つけることができないか、その依存関係の1つを見つけることができないと思います。 私は依存関係ウォーカーを使用して依存関係を把握しようとしました。 vcruntime140.dllを除いてほとんどが典型的なWindowsバイナリでした。プロジェクトを右クリックし、Add> Existing Itemに移動し、ソリューションエクスプローラのリソースの "Copy to Output Directory"プロパティを "Copy always"に編集して、VSプロジェクトにリソースファイルとして追加しました。これはネイティブdllをサービスファブリックにデプロイする正しい方法ですか?私はリリースモードでも実行しているので、必要なデバッグDLLはないはずです。

いくつかの追加情報 - 私のプロジェクトは最初にWeb APIプロジェクトから移植されました。リリースモードでAzureでWeb APIをホストすると、Win32 DLLで関数を正常に呼び出すことができました。

私はいくつかの追加情報を提供する必要があるかどうか教えてください

答えて

1

私はそれを理解しました。

私が依存関係ウォーカーを使用したとき、私はvcruntime140.dllとmsvcp140.dllに直ちに依存関係があることを知りました。しかし、深く掘り下げてみると、msvcp140.dllにconcrt140.dllに対する追加の依存関係があることに気付きました。これを私のサーバのbinフォルダにコピーしたとき、私はもう内部サーバのエラーを取得せず、私はwin32 dllを呼び出すことができました。

これらはすべて、Visual Studio 14.0 \ VC \ redist \ x64 \ Microsoft.VC140.CRTにあるVisual StudioのC++再配布可能なバイナリです。

関連する問題