2

アンマネージC圧縮ライブラリをラップするC++/ CLIプロジェクトがあり、このプロジェクトはC++Compress関数を呼び出すMVC3プロジェクトによって参照されます。

すべてがローカルで正常に機能しますが、ソリューションをAzureクラウドに公開すると、module/dllが見つからなかったというエラーが表示されます。

ファイルまたはアセンブリ'LZGEncoder.DLL'またはその依存関係の1つを読み込めませんでした。指定されたモジュールが見つかりませんでした。

DLLファイルが見つからないのはなぜですか?それは間違った場所に行くのですか、それともコンパイルされているのですか?確認する方法はありますか?ありがとう!

4

4 に答える 4

6

問題は、Visual C++2010ランタイムライブラリがクラウド側にないことでした。

私が行ったのは、Visual C ++ 2010再頒布可能パッケージをプロジェクトに追加することと、起動時にサイレントにインストールするスクリプトを追加することでした。これで、ネイティブdllが機能します。ネイティブCdllを使用している場合にも、これが必要です。

手順:

1)Visual C ++ 2010再頒布可能パッケージをダウンロードし、プロジェクトに追加します。

2)新しいバッチファイルを作成し、これを追加します。
vcredist_x64.exe /q /norestart
exit /b 0

3)ServiceDefinition.csdefファイルを開き、関連するWebRole要素の下にこれを追加します。

<Startup>
  <Task commandLine="InstallVCRedist.bat" executionContext="elevated" taskType="simple" />  
</Startup>  

更新:
Visual C ++ 2012がリリースされ、同じスクリプトが機能しますが、Azureが少なくともWindows Server 2008 R2を実行していることを確認する必要があります。そうしないと、起動タスクがハングし、役割が開始されません(vcredistプロセスを強制終了するまで) RDP経由のタスクマネージャー)。

于 2012-06-21T11:36:01.217 に答える
3

Azure VMの内容を確認する場合は、CSPKGファイルを解凍してから、もう一度.CSSXファイルを解凍し(CSSXの名前をzipに変更するだけ)、すべての参照がそこにあることを確認します。このようにして、VM上にあるものと一致させることができます。VSで欠落しているDLLを確認したら、参照DLLを選択し、そのプロパティ「ローカルコピー」を「True」に設定します。

于 2012-06-20T16:22:41.350 に答える
1

ライブサーバー上に存在するフォルダーにすべてのdllを配置する必要があります。ローカルからの参照を追加し、その場所がライブに存在しない場合は、ライブでコードをビルドできません。したがって、コードをライブにデプロイする前に、すべてのdllがライブに存在することを確認してください。

于 2014-06-11T06:32:45.923 に答える
0

C ++ dllとアンマネージCライブラリ(ソースだけでなく.dllの場合)の両方がサービスパッケージに含まれていることを確認し、コンパイラがC++ライブラリを適切な場所にダンプしていることを確認します。この記事にはまともなウォークスルーがあります。

于 2012-06-20T15:05:06.973 に答える