1

これは私が得るエラーコードです

System.BadImageFormatException: impossible to load the file or assembly '6632 bytes loaded from quick test 2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Attempt to load a program in a bad format.
Nome file: '6632 bytes loaded from quick test 2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' ---> System.BadImageFormatException: Format IL not correct.
   in System.Reflection.Assembly.nLoadImage(Byte[] rawAssembly, Byte[] rawSymbolStore, Evidence evidence, StackCrawlMark& stackMark, Boolean fIntrospection)
   in System.Reflection.Assembly.Load(Byte[] rawAssembly)
   in quick_test_2.Form1.button2_Click(Object sender, EventArgs e) in C:\Users\HHH\Documents\Visual Studio 2010\Projects\quick test 2\quick test 2\Form1.cs:riga 175
   in System.Windows.Forms.Control.OnClick(EventArgs e)
   in System.Windows.Forms.Button.OnClick(EventArgs e)
   in System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   in System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   in System.Windows.Forms.Control.WndProc(Message& m)
   in System.Windows.Forms.ButtonBase.WndProc(Message& m)
   in System.Windows.Forms.Button.WndProc(Message& m)
   in System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   in System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   in System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

単純な Windows フォーム アプリケーション (.net c#) を読み込もうとすると

私が使用するコードはこれです

try 
{
    Assembly myAsm = Assembly.Load(File.ReadAllBytes("myFile.exe"));
    MethodInfo myMethod = assm.EntryPoint;
    object myObj = assm.CreateInstance(myMethod.Name);
    myMethod.Invoke(o, null);
}
catch 
{
    //error
}

これまでのところ、フォームを削除してProgram.cs内の[STAThread]からコードを実行したフォームアプリケーションでのみ機能させることができましたが、単純なコンソールアプリケーションでも機能しませんでした。

これに関する洞察はありますか?

4

3 に答える 3

1

読み込まれたアセンブリは、ホスト exe (x86 と x64) と同じ CPU アーキテクチャ用にビルドされていますか? ホスト アセンブリが「任意の CPU」に設定され、読み込まれたアセンブリが x86 に設定されている場合、64 ビット マシンで問題が発生します。

于 2013-03-12T22:23:13.380 に答える
0

問題は、呼び出し元のアプリケーションが winform アプリ自体であることにあると思います。単純な [Stathread] からプログラムを手動で開始したところ、機能しました。これが解決済みと見なされるかどうかはわかりません

于 2013-03-12T23:33:19.683 に答える
0

通常、.csproj のターゲット フレームワークを変更し、元のフレームワークに戻したときに発生する可能性があります。適切なソリューションをグーグルで検索しようと夢中になる前に、次のことを確認してください。

  1. app.config のスタートアップ タグの下に supportedRuntime version="a different runtime from cs project target" があるかどうかを確認します。

  2. これは、他の自動生成されたファイルまたはプロパティ フォルダーの他のファイルをチェックして、これらのファイルと .csproj ファイルで定義されているファイルとの間にランタイムの不一致がないかどうかを確認することも意味します。

これらは、エラーを克服するためにプロジェクトのプロパティでさまざまなことを試す前に、多くの時間を節約できます。

于 2013-04-11T10:16:44.550 に答える