none
Konflikt zwischen Prozessorarchitektur RRS feed

  • Frage

  • Hallo zusammen,

    Ich arbeite seit einer Weile mit dem neuen VS 2012 (Proffesional Edition). Und nun hole ich so langsam ein Projekt nach dem anderen rüber(von 2010 zu 2012). Nun bekomme ich bei einen meiner Projekte folgende Warnmeldung :

    Warnung    1    Konflikt zwischen Prozessorarchitektur des Projekts "MSIL", das erstellt wird, und der Prozessorarchitektur des Verweises, "Kopierer", "x86". Dieser Konflikt kann zu Laufzeitfehlern führen. Ändern Sie ggf. mithilfe des Konfigurations-Managers die als Ziel angegebene Prozessorarchitektur Ihres Projekts so, dass die Prozessorarchitekturen zwischen Ihrem Projekt und den Verweisen ausgerichtet werden, oder wählen Sie eine Abhängigkeit von Verweisen mit einer Prozessorarchitektur, die der als Ziel angegebene Prozessorarchitektur Ihres Projekts entspricht.

    Zu diesem Project : Es ist ein Haupprojekt mit zwei Unterprojekten ( eine Testumgebung und ein Projekt Namens Kopierer ). Kann mir einer Erklären (Für Neulinge) Was VS da von mir will ?

    Habe im Konfiguartionsmanager geschaut und da gibt es wirklich unterschiedliche Eintragungen bei der Spalte Plattform (Any CPU und x86). ABer leider bekomme ich diese Einstellungen nicht verändert.

    Danke für die Hilfe

    Daniel

    Freitag, 30. November 2012 19:55

Antworten

  • Ach so: Die Lösung ist natürlich, dass Du die EXE anstatt mit "AnyCPU" mit "x86" übersetzt.
    Alternativ natürlich dass Du die DLL als "AnyCPU" übersetzt; dies wird aber oft nicht gehen, da es oft von native x86-DLLs abhängig ist.

    Alternativ kannst Du natürlich auch zwei Varianten der DLL erzeugen x86 und x64... das erfordert aber etwas geschickt beim korrekten laden der DLLs...


    Jochen Kalmbach (MVP VC++)
    • Als Antwort vorgeschlagen Stefan FalzModerator Dienstag, 4. Dezember 2012 19:34
    • Als Antwort markiert Daniel, Donnerstag, 6. Dezember 2012 17:05
    Freitag, 30. November 2012 20:21
  • Hallo Daniel,

    x86 Anwendungen laufen sowohl auf 32- sowie auf 64-Bit Systemen. Leidglich x64 Anwendungen laufen nur auf 64-Bit Systemen.

    Umstellen kannst Du das in den Projekteigenschaften.

    Projekt
     -> rechte Maustaste
       -> Projekteigenschaften
         -> Reiter "Kompilieren"
           -> Button "Erweiterte Kompilierungsoptionen"
             -> ...

    Je nach VS Version und verwendeter Programmiersprache kann der Pfad ein wenig anders aussehen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Daniel, Sonntag, 9. Dezember 2012 14:57
    Dienstag, 4. Dezember 2012 19:34
    Moderator

Alle Antworten

  • Du hast hier eine EXE, welche mit "AnyCPU" übersetzt ist. Dies bedeutet, dass es auf x86 Systemen als "x86" ausgeführt wird und auf x64-Systemen als "x64".

    Gleichzeitig hast Du aber ein Verweise, welcher als "x86" übersetzt wird. Wird nun Deine EXE als x64 ausgeführt, so kann diese keine x86-Komponenten laden; somit geht Dein Programm auf x64 Systemen nicht.


    Jochen Kalmbach (MVP VC++)
    Freitag, 30. November 2012 20:20
  • Ach so: Die Lösung ist natürlich, dass Du die EXE anstatt mit "AnyCPU" mit "x86" übersetzt.
    Alternativ natürlich dass Du die DLL als "AnyCPU" übersetzt; dies wird aber oft nicht gehen, da es oft von native x86-DLLs abhängig ist.

    Alternativ kannst Du natürlich auch zwei Varianten der DLL erzeugen x86 und x64... das erfordert aber etwas geschickt beim korrekten laden der DLLs...


    Jochen Kalmbach (MVP VC++)
    • Als Antwort vorgeschlagen Stefan FalzModerator Dienstag, 4. Dezember 2012 19:34
    • Als Antwort markiert Daniel, Donnerstag, 6. Dezember 2012 17:05
    Freitag, 30. November 2012 20:21
  • Danke Jochen für die Antwort und sorry für das Späte zurück melden.

    Also wenn ich die Exe auf x86 setze Läuft meine Anwendung auch nur auf 32bit Systemen!?!

    Wo kann ich das Umstellen das die Exe als AnyCPU  erstellt werden soll?

    Gruß Daniel

    Dienstag, 4. Dezember 2012 18:19
  • Hallo Daniel,

    x86 Anwendungen laufen sowohl auf 32- sowie auf 64-Bit Systemen. Leidglich x64 Anwendungen laufen nur auf 64-Bit Systemen.

    Umstellen kannst Du das in den Projekteigenschaften.

    Projekt
     -> rechte Maustaste
       -> Projekteigenschaften
         -> Reiter "Kompilieren"
           -> Button "Erweiterte Kompilierungsoptionen"
             -> ...

    Je nach VS Version und verwendeter Programmiersprache kann der Pfad ein wenig anders aussehen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Daniel, Sonntag, 9. Dezember 2012 14:57
    Dienstag, 4. Dezember 2012 19:34
    Moderator
  • Hallo,

    die Prozessarchitektur kannst du in den Projekteigenschaften einstellen

    VB.NET: Kompilieren > Ziel-CPU
    C#: Erstellen > Zielplattform

    Wie Jochen bereits sagte, müssen beide Projekte auf der selben "Plattform" laufen.

    Wenn du eine x86 Assembly erstellst, so funktioniert Sie problemlos auf einem x64 Windows. x86 Prozesse werden im Taskmanager aber gekennzeichnet

    x64 Assemblys können aber x86 Assemblys laden, falls du von einer Thirdparty x86 DLL abhängig bist die x86 als Plattform benötigen.


    Koopakiller [kuːpakɪllɐ] http://koopakiller.ko.ohost.de/


    Dienstag, 4. Dezember 2012 19:36
    Moderator