Frage

Während ein Projekt umgewandelt werden, die SlimDX verwendet und daher nicht verwalteten Code hat, zu .NET 4.0 Ich lief in die folgenden Fehler:

  

Mixed-Modus Montag wird gebaut gegen Version ‚v2.0.50727‘ der Laufzeit und kann nicht in der 4.0-Laufzeit ohne zusätzliche Konfigurationsinformationen geladen werden.

Googeln hat mir um die Lösung, die dies auf die Anwendungen Config hinzuzufügen ist:

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

Meine Frage ist, was ist die useLegacyV2RuntimeActivationPolicy tun? Ich kann keine Unterlagen über sie finden.

War es hilfreich?

Lösung

Nach einem wenig Zeit (und mehr Such), fand ich dieser Blog-Eintrag von Jomo Fisher.

  

Eine der jüngsten Probleme, die wir gesehen haben, ist, dass wegen der Unterstützung für Side-by-Side-Runtimes hat .NET 4.0 die Art und Weise verändert, dass es für ältere Mixed-Mode-Baugruppen bindet. Diese Baugruppen sind, beispielsweise solche, die von C ++ \ CLI kompiliert werden. Derzeit ist verfügbar DirectX Baugruppen gemischter Modus. Wenn Sie eine Meldung wie diese sehen, dann wissen Sie Sie in der Ausgabe ausgeführt haben:

     

Mixed-Mode-Baugruppe gegen Version 'v1.1.4322' der Laufzeit gebaut und kann nicht in der 4.0-Laufzeit ohne zusätzliche Konfigurationsinformationen geladen werden.

     

[Snip]

     

Die gute Nachricht für Anwendungen ist, dass Sie die Möglichkeit, fällt zurück auf .NET 2.0-Ära haben für diese Baugruppen, indem eine app.config-Flagge als so verbindlich:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0"/>
</startup>

So ist es die Art, wie sieht die Laufzeitbelastungen Mixed-Mode-Baugruppen geändert hat. Ich kann keine Einzelheiten zu dieser Änderung finden, oder warum es gemacht wurde. Aber das useLegacyV2RuntimeActivationPolicy Attribut auf CLR 2.0 Laden kehrt zurück.

Andere Tipps

Hier ist eine Erklärung, die ich vor kurzem mit der Leere der Informationen über dieses Attribut zu helfen, schrieb. http://www.marklio.com/marklio/PermaLink,guid,ecc34c3c-be44-4422-86b7-900900e451f9.aspx (Internet Archive Wayback Machine Link)

die relevantesten Bits zu zitieren:

  

[Installation .NET] v4 ist „non-impactful“. Es soll nicht das Verhalten bestehender Komponenten ändern, wenn installiert.

     

Das useLegacyV2RuntimeActivationPolicy Attribut läßt Sie im Allgemeinen sagen: „Ich habe einige Abhängigkeiten von dem Legacy-Shim-APIs. Bitte machen sie die Art und Weise arbeiten sie in Bezug auf die gewählte Laufzeit verwendet.“

     

Warum wir das nicht das Standardverhalten machen? Man könnte argumentieren, dass dieses Verhalten mehr kompatibel ist, und macht Code aus früheren Versionen portieren viel einfacher. Wenn Sie sich erinnern, kann dies nicht das Standardverhalten, weil es impactful Installation von v4 machen würde, die auf Ihrem Computer installiert bestehende Anwendungen brechen kann.

Der vollständige Beitrag erklärt dies im Detail. Bei RTM sollte die MSDN-Dokumentation auf diese besser sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top