3

マネージDLLであるp4.netを使用するプロジェクトがいくつかあります。p4.netは、32ビットのアンマネージDLLであるp4dn.dllに依存しています。これはx64システムで問題があるため、p4.netを使用する各プロジェクトに移動し、そのプロセッサタイプをx86に設定する必要がありました。

問題を正しく理解していれば、.NETがexeをロードすると、マニフェストをチェックし、マニフェストがない場合は、プロセッサタイプに最適な処理を実行します。次に、32ビットdllに遭遇すると、barfsします。

p4.netを使用する各プロジェクトに移動し、32ビットとしてマークすることができます。しかし、これらはかなりの数あります。また、人々は新しいものを作り続け、32ビットを設定するのを忘れるでしょう。そして将来、誰かがx64でそれを使おうとすると、この問題が再び発生します。

私の質問はこれです:.NETにp4dn.dllを32ビットとして使用するアプリを自動的にロードさせる方法はありますか?それができない場合、IDEがこれを検出してビルドに失敗する方法はありますか?

または、p4apiまたはp4dn.dllの横に配置できる.manifestファイルを作成して、それらを使用するアプリが32ビットで自動実行されるようにすることは可能ですか?

4

3 に答える 3

2

他に選択肢がまったくない場合は、自動ビルド スクリプトの一部としてcorflagscorflags /32bit+ file.dllを使用して、すべての .NET dll を x86 - としてマークすることができます。開発者の適切な教育がより適切な解決策だと思いますが。

于 2009-02-18T21:54:48.443 に答える
1

CLR は、GAC からアセンブリを読み込む場合にのみプラットフォーム タイプをチェックします。p4dn.dll はアプリケーションのルート フォルダーに含まれていると思いますので、ロジックが間違っていると思います。

p4dn.dll が WoW64 モードで実行されていて、アプリケーションが x64 モードでネイティブに実行されている場合、p4dn.dll を使用できないようです。最善の方法は、x86 (32) プラットフォームを対象とするすべてのプロジェクトをコンパイルすることだと思います。または、パーツに分割して、p4dn.dll 呼び出し元が常に WoW64 モードで実行されるようにします。

また、完全な x64 プラットフォーム サポートを追加するには、p4net 開発者に連絡する必要があります。

于 2009-02-18T20:53:47.140 に答える
0

これを自動的に行う方法がわかりません。次のことをお勧めします。

  • 開発者をトレーニングし、
  • このトピックを社内ナレッジ ベースに追加し、
  • x64 プラットフォームをテスト環境に追加する

さらに、正しいターゲット プラットフォームをチェックする VS アドインを作成することを考えるかもしれません。しかし、COM コンポーネントの動的な作成もあるかもしれません...

于 2009-02-18T20:54:59.180 に答える