0

AnyCPU 対 x86 コンパイラの設定に問題がありますが、それを正しく理解していれば、問題は通常とは逆のようです。

現在、すべてが Visual Studio 2010 を搭載した Win 7 64 ビット マシン上にあります。問題のアプリケーションは Dot.NET 3.5 です。Visual Studio は英語ですが、エラーの一部は OS の言語であるドイツ語です。


プロジェクト E: 3 つのサブプロジェクト (DLL として 2 つ、exe として 1 つ) を含むメイン プロジェクト/ソリューション。アクセスするには OleDB が必要なため、x86 としてコンパイルされた VB.net 3.5。元々は、WinXP の 32 ビット マシン上の VS 2008 または VS 2005 で開始されました。

プロジェクト ADB: vb.net exe は、スタンドアロンとして起動できるようにする必要があり、プロジェクト E からフォームにアクセスできる必要があります。これが関連する場合、32ビットマシン/ WinXPにまだあったと思います。
OledDB to MS Access が必要なため、スタンドアロン exe は x86 である必要があります。
しかし、ソリューションの一部として x86 としてコンパイルすると ([プロジェクト プロパティ] > [コンパイル] > [高度なコンパイル オプション])、ビルド エラーが発生します (以下を参照)。AnyCPU に変更すると、OleDB へのアクセスを含むソリューションの一部として機能します (つまり、x86 ですよね?) が、スタンドアロンでは OleDB を使用できなくなります (つまり、x86 ではありませんよね?)。 .

プロジェクト Au: E のリファレンスに含まれる vb.net DLL、OleDB は不要。x86 としてコンパイルすると、プロジェクト ADB と同じエラーが発生します。AnyCPU としてコンパイルされた場合に機能します。32 ビット マシンの VS 2008 に追加されました。

プロジェクト S: C# DLL、OleDB は必要ありません。x86 としてコンパイルされ、E のリファレンスに含まれているため、これは機能します。Web からのダウンロードで、32 ビット マシンの VS 2008 に追加されました。

ビルド エラーは次のとおり
です。Es wurde versucht, eine Datei mit einem falschen Format zu laden.
翻訳済み:
ファイルまたはアセンブリ 'XYZ' またはその依存関係の 1 つを読み込めませんでした。不正な形式のプログラムをロードしようとしました。

AnyCPU スタンドアロンとして ADB を起動したときに発生する OleDb エラーは次のとおりです

これは、通常の非 64 ビット JET エラー警告です
。「Microsoft.Jet.OLEDB.4.0」プロバイダーがローカル コンピューターに登録されていません。

さて、私が理解しているように、通常、メイン プロジェクトが AnyCPU でサブ プロジェクトが特定の場合、AnyCPU から x86 (この場合は x64) にアクセスしようとするため、ビルド エラーが発生します。しかし、ここでは動作しない x86 から x86 にアクセスしようとしていますが、x86 から AnyCpu (x64 である必要があります) にアクセスすると動作しますか?

必要に応じて、詳細情報とすべての構成ファイルなどを提供できます。

紛らわしい書き方をして申し訳ありませんが、この問題について非常に混乱しています。

4

2 に答える 2

1

設定の使用は避けるAnyCPU必要があります。

しかし、ソリューションが正しく構成されていないと思います。Visual Studio 2010 で、ソリューションを右クリックし、[プロパティ] ("Eigenschaften") をクリックします。「構成プロパティ」(「構成プロパティ」) を選択し、すべてのプロジェクトが としてビルドされるようにしx86ます。

アプリケーションの 64 ビット バージョンを提供する予定がある場合は、別のビルド プロファイルを作成することをお勧めします。これを行うには、ソリューションのプロパティで [構成マネージャー] をクリックします。[アクティブなプラットフォーム構成] で [<新規...>] を選択し、[x64] を選択して、[x86] から設定をコピーし、[新しいプロジェクト プラットフォームの作成] を有効にします。次に、リストを調べて、すべてのプロジェクトがこの構成内で x64 としてビルドされていることを確認します。

于 2013-01-11T12:58:37.900 に答える
0

よし、今見つけた。問題は、エラー メッセージがあまり役に立たなかったことです。

出力を掘り下げると、特定のフォームの resgen.exe に問題があることがわかりました。Google と VS コマンド ラインをさらに掘り下げると、どういう
わけか間違った System.Forms.dll を取得しようとしていることが明らかになりました。 -beta2-bug-5252020 に関連しているようで、はい、そのフォームで ImageList を使用していたことに気づきました。

于 2013-01-23T15:16:57.577 に答える