MSBuild 4.0 oder Visual Studio 2010 kann eine 32-Bit-Anwendung für .NET Framework 3.5, 3.0 oder 2.0 auf einem x64-Computer möglicherweise nicht kompilieren

In diesem Artikel können Sie das Problem beheben, bei dem MSBuild 4.0 oder Microsoft Visual Studio 2010 keine 32-Bit-Anwendung kompilieren kann, die für .NET Framework 3.5, 3.0 oder 2.0 auf x64-Computern vorgesehen ist.

Originalversion des Produkts:   Visual Studio 2010
Ursprüngliche KB-Nummer:   2028833

Problembeschreibung

Sie erstellen eine Anwendung für die x86-Konfiguration auf einem x64-Computer mit Visual Studio 2010. Das Projekt enthält eine Ressourcendatei, die auf eine 32-Bit-Assembly verweist. Das ausgewählte Zielframework ist 3.5, 3.0 oder 2.0.

Möglicherweise wird die folgende Fehlermeldung angezeigt:

Form1.resx(161,5):error RG0000: Datei oder Assembly "<file_name>" oder eine der zugehörigen Abhängigkeiten konnte nicht geladen werden. Es wurde versucht, ein Programm mit einem falschen Format zu laden. Zeile 161, Position 5.

Das Diagnosebuildprotokoll zeigt, dass die Aufgabe "GenerateResource" fehlschlägt.

Ursache

Resgen.exe in <system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\vx.x\bin, das Teil Windows SDK ist, ist als MSIL gekennzeichnet, sodass es als 64-Bit-Prozess ausgeführt wird. Es wird versucht, eine 32-Bit-Assembly zu laden, und es tritt ein Fehler auf.

Lösung

Um dieses Problem zu umgehen, müssen Sie die folgenden Schritte ausführen:

  1. Schließen Sie alle Instanzen von Visual Studio.

  2. Öffnen Sie im Visual Studio-Tools Unterordner eine Eingabeaufforderung mit erhöhten rechten Visual Studio (2010) (mit der Option "Als Administrator ausführen"). Verzeichnis ändern in <system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\v<x.xx>\bin\.

  3. Führen Sie den Folgenden Befehl aus:

    corflags /32bit+ ResGen.exe /force
    
  4. Öffnen Sie <project_name>csproj im Editor.

  5. Fügen Sie die Eigenschaft <ResGenToolArchitecture>Managed32Bit</ResGenToolArchitecture> unter dem PropertyGroup Abschnitt hinzu. Speichern und schließen Sie die csproj-Datei.

Weitere Informationen

Wenn Sie eine RESX-Datei erstellen möchten, die auf eine 64-Bit-Assembly verweist, die auf v3.5, v3.0 oder v2.0 ausgerichtet ist, müssen Sie diese Problemumgehung möglicherweise rückgängig machen, bevor Sie dies tun.

CorFlagsCorFlags.exe (CorFlags Conversion Tool) kann Ihnen helfen.