C#でネイティブC++ダイナミックライブラリを参照するAzure Webを作成しました。ローカルホストアプリケーションでは正常に動作しています。azur webapp with C++ dll not working
しかし、私がCloud Azureにウェブアプリケーションをデプロイしたとき、そのアプリケーションは動作しません。どのように進むのか手がかりを得ていない。助けてください。
リセットAPI呼び出しで「次のエラーが発生しました。」
C#でネイティブC++ダイナミックライブラリを参照するAzure Webを作成しました。ローカルホストアプリケーションでは正常に動作しています。azur webapp with C++ dll not working
しかし、私がCloud Azureにウェブアプリケーションをデプロイしたとき、そのアプリケーションは動作しません。どのように進むのか手がかりを得ていない。助けてください。
リセットAPI呼び出しで「次のエラーが発生しました。」
リセット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を確認する必要があります。
あなたのWebアプリケーションのプラットフォームは32ビットである場合には、ネイティブのDLLは、ビルドターゲットのWin32またはすべてのプラットフォームだったことを確認してください。 64ビットマシンにDLLを構築する場合。すべてのプラットフォームが必要です。また
、安全な環境で実行AzureのWebアプリケーションは、サンドボックスと呼ばれます。サンドボックスは一般に、Windowsの共有コンポーネントへのアクセスを制限することを目的としています。詳細については、下記のリンクを参考にしてください。
General Azure Web App Sandbox Restrictions
ネイティブDLLの使用制限付きAPIのいずれかの場合。ネイティブDLLへの呼び出しも失敗します。ネイティブDLLのすべての依存モジュールを表示するには、Dependency Walkerをダウンロードして使用します。
ありがとうございます。 私が見ているエラーメッセージは です。
あなたのWebアプリケーションで選択しますか? 32ビットまたは64ビット? 32ビットWebアプリケーションにC++ DLLをデプロイすると、DllNotFoundExceptionも発生します。最後に、C++ DLLを再構築し、プラットフォームとして 'Win32'を選択することで解決しました。 – Amor
私は64ビットプラットフォーム用のWebアプリケーションを作成し、64ビットのC++ dll(リリース構成)をビルドしました。これで問題は解決しました。 1. relaseモードで64ビット構成を使用してC++ライブラリを生成します。 ビルド - >構成マネージャ 選ぶ---> Reslease、プラットフォームのx64 2. 64ビット構成のデバッグモードに ビルドを使用してWebアプリケーションを生成 - > [構成マネージャ 選ぶ--->デバッグ、プラットフォームx64 3. AzureでWebアプリケーションを64ビット構成で実行します。 アプリケーション設定 - > 64ビット ありがとうございます@ Amor-MSFTはソリューションを提供しています。 – Mahendra971
まず、dllやその他の依存関係があるかどうかを確認してください。 – Simon
また、dllのビット数が、あなたのウェブアプリケーションが使用するように設定されているビット数(32ビット/ 64ビット)と一致することを確認してください。 –