2017-06-01 7 views
0

C#でネイティブC++ダイナミックライブラリを参照するAzure Webを作成しました。ローカルホストアプリケーションでは正常に動作しています。azur webapp with C++ dll not working

しかし、私がCloud Azureにウェブアプリケーションをデプロイしたとき、そのアプリケーションは動作しません。どのように進むのか手がかりを得ていない。助けてください。

リセットAPI呼び出しで「次のエラーが発生しました。」

+0

まず、dllやその他の依存関係があるかどうかを確認してください。 – Simon

+0

また、dllのビット数が、あなたのウェブアプリケーションが使用するように設定されているビット数(32ビット/ 64ビット)と一致することを確認してください。 –

答えて

0

リセットAPIコールで「エラーが発生しました」というメッセージが表示される

ASP.NET REST APIから詳細エラー情報を取得するには、WebApiConfig.csにIncludeErrorDetailPolicyプロパティの値を 'Always'として設定する必要があります。

config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 

あなたは後にIncludeErrorDetailPolicy変わってしまった例外がDllNotFoundExceptionある場合は、ネイティブのDLLはAzureのWebアプリケーションのbinフォルダに正常にデプロイされていることを確認してください。既定では、ネイティブDLLファイルは、VSパブリッシュでは展開されません。 FTPまたはKuduサイトを使用してこのファイルをWebアプリケーションのbinフォルダにアップロードする必要があります。

IncludeErrorDetailPolicyを変更した後に例外が発生した場合は、BadImageFormatExceptionです.WebアプリケーションのプラットフォームとネイティブDLLを確認する必要があります。

enter image description here

あなたのWebアプリケーションのプラットフォームは32ビットである場合には、ネイティブのDLLは、ビルドターゲットのWin32またはすべてのプラットフォームだったことを確認してください。 64ビットマシンにDLLを構築する場合。すべてのプラットフォームが必要です。また

enter image description here

、安全な環境で実行AzureのWebアプリケーションは、サンドボックスと呼ばれます。サンドボックスは一般に、Windowsの共有コンポーネントへのアクセスを制限することを目的としています。詳細については、下記のリンクを参考にしてください。

General Azure Web App Sandbox Restrictions

ネイティブDLLの使用制限付きAPIのいずれかの場合。ネイティブDLLへの呼び出しも失敗します。ネイティブDLLのすべての依存モジュールを表示するには、Dependency Walkerをダウンロードして使用します。

+0

ありがとうございます。 私が見ているエラーメッセージは です。 System.DllNotFoundException この例外は、binフォルダ(/ site/wwwroot/bin)に正しいdllがあってもスローされます – Mahendra971

+0

あなたのWebアプリケーションで選択しますか? 32ビットまたは64ビット? 32ビットWebアプリケーションにC++ DLLをデプロイすると、DllNotFoundExceptionも発生します。最後に、C++ DLLを再構築し、プラットフォームとして 'Win32'を選択することで解決しました。 – Amor

+0

私は64ビットプラットフォーム用のWebアプリケーションを作成し、64ビットのC++ dll(リリース構成)をビルドしました。これで問題は解決しました。 1. relaseモードで64ビット構成を使用してC++ライブラリを生成します。 ビルド - >構成マネージャ 選ぶ---> Reslease、プラットフォームのx64 2. 64ビット構成のデバッグモードに ビルドを使用してWebアプリケーションを生成 - > [構成マネージャ 選ぶ--->デバッグ、プラットフォームx64 3. AzureでWebアプリケーションを64ビット構成で実行します。 アプリケーション設定 - > 64ビット ありがとうございます@ Amor-MSFTはソリューションを提供しています。 – Mahendra971