it-swarm.com.de

Welche zusätzliche Konfiguration ist erforderlich, um auf eine .NET 2.0-Assembly im gemischten Modus in einem .NET 4.0-Projekt zu verweisen?

Ich habe ein Projekt, in dem ich einige der .NET 4.0-Funktionen verwenden möchte, aber eine Hauptanforderung ist, dass ich das System.Data.SQLite-Framework verwenden kann, das mit 2.X kompiliert wurde. Ich sehe Erwähnung, dass dies möglich ist, wie die akzeptierte Antwort hier aber ich sehe nicht, wie dies tatsächlich erreicht werden kann.

Wenn ich nur versuche, mein 4.0-Projekt auszuführen, während ich auf die 2.X-Assembly verweise, erhalte ich:

Mixed-Mode-Assembly wurde für Version 'v2.0.50727' der Laufzeit erstellt und kann ohne zusätzliche Konfigurationsinformationen nicht in die 4.0-Laufzeit geladen werden.

Welche "zusätzliche Konfiguration" ist notwendig?

515
jamone

Um eine CLR 2.0 Mixed Mode Assembly zu verwenden, müssen Sie Ihre App.Config-Datei so ändern, dass sie Folgendes enthält:

<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

Der Schlüssel ist das Flag useLegacyV2RuntimeActivationPolicy. Dies führt dazu, dass die CLR die neueste Version (4.0) verwendet, um die Assembly im gemischten Modus zu laden. Ohne das wird es nicht funktionieren.

Beachten Sie, dass dies nur für C++/CLI-Assemblys (Mixed Mode) von Bedeutung ist. Sie können alle verwalteten CLR 2-Assemblys laden, ohne dies in app.config Anzugeben.

680
Reed Copsey

Dies Forumsbeitrag im .NET Framework Developer Center. Es könnte einen Einblick geben.

(Zur Konfigurationsdatei der App hinzufügen.)

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

Abhängig von der Version des Frameworks, auf das Sie abzielen, möchten Sie möglicherweise hier nachsehen, um die richtige Zeichenfolge abzurufen:

http://msdn.Microsoft.com/en-us/library/ee517334.aspx

Ich habe Stunden damit verbracht herauszufinden, warum mein Release, das auf einen .NET 4.0-Client abzielt, die Vollversion benötigt. Ich habe das am Ende benutzt:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0.30319" 
               sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>
13
Anthony Wieser

Sobald Sie die Datei app.config festgelegt haben, generiert Visual Studio eine Kopie im Ordner bin mit dem Namen App.exe.config. Kopieren Sie diese während der Bereitstellung in das Anwendungsverzeichnis. Klingt offensichtlich, aber überraschenderweise verpassen viele Leute diesen Schritt. WinForms-Entwickler sind nicht an die Konfiguration von Dateien gewöhnt :).

11
Raheel Khan

Die Verwendung von 2.0- und 4.0-Assemblys zusammen ist nicht ganz einfach.

Die ORDER der unterstützten Framework-Deklarationen in app.config haben tatsächlich Auswirkungen auf die Ausnahme, dass der gemischte Modus ausgelöst wird. Wenn Sie die Deklarationsreihenfolge umkehren, wird ein Fehler im gemischten Modus angezeigt. Dies ist der Zweck dieser Antwort.

Wenn der Fehler in einer Windows Forms-App auftritt, versuchen Sie dies, hauptsächlich in Windows Forms-Apps.

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
    <supportedRuntime version="v2.0.50727"></supportedRuntime>
  </startup>

Oder wenn das Projekt nicht Windows Form ist. Fügen Sie dies in einem Webprojekt zur Datei web.config hinzu.

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"></supportedRuntime>
  </startup>
8
Wiser Web

Konnte das Problem lösen, indem "startup" Element mit "useLegacyV2RuntimeActivationPolicy" Attributsatz hinzugefügt wurde.

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
</startup>

Musste es jedoch als erstes untergeordnetes Element des Konfigurationstags in App.config platzieren, damit es wirksam wird.

<?xml version="1.0"?>
  <configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      <supportedRuntime version="v2.0.50727"/>
    </startup>
  ......
....
7
Deshan

Das oben Genannte hat bei mir nicht funktioniert (ich arbeite an einer Web-App) - aber das hat ...

Bearbeiten Sie die Datei sgen.exe.config im Ordner (ich musste zuerst eine erstellen). C:\Programme (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0-Tools

Die Inhalte des XML sollten so aussehen (wie in den vorherigen Antworten)

<?xml version ="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/>
    </startup>
</configuration>
5
MarkPm

Wenn Sie in einem Webdienst arbeiten und die v2.0-Assembly eine Abhängigkeit ist, die von WcfSvcHost.exe geladen wurde, müssen Sie einschließen

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

in der Datei ..\Microsoft Visual Studio 10.0\Common7\IDE\WcfSvcHost.exe.config

Auf diese Weise kann Visual Studio zur Laufzeit die richtigen Informationen über den Loader senden.

5
MrBit

Ich bin auf dieses Problem gestoßen, als wir zu Visual Studio 2015 gewechselt haben. Keine der obigen Antworten hat für uns funktioniert. Am Ende haben wir es geschafft, indem wir die folgende Konfigurationsdatei zu ALL sgen.exe executables on the machine hinzugefügt haben

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

Besonders an diesem Ort, selbst als wir .NET 4.0 als Ziel hatten:

C:\Programme (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools

4
Run CMD

Ich habe diese Konfiguration verwendet:

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

Hat für mich gearbeitet

3
OmriSela

Ich hatte dieses Problem beim Upgrade auf Visual Studio 2015 und keine der hier veröffentlichten Lösungen machte einen Unterschied, obwohl die Konfiguration richtig ist und der Ort für die Änderung nicht stimmt. Ich habe dieses Problem behoben, indem ich diese Konfiguration hinzufügte:

<startup useLegacyV2RuntimeActivationPolicy="true">
</startup>

An: C:\Programme (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\TE.ProcessHost.Managed.exe.config

Starten Sie dann Visual Studio neu.

1

Ich hatte den gleichen Fehler und habe ewig damit verbracht, die vorgeschlagenen Startanweisungen verschiedenen Konfigurationsdateien in meiner Lösung hinzuzufügen, um die Framework-Nichtübereinstimmung zu isolieren. Nichts hat geklappt. Ich habe auch Startinformationen zu meinen XML-Schemas hinzugefügt. Das hat auch nicht geholfen. Ein Blick auf die eigentliche Datei, die das Problem verursacht hat (was nur bedeutet, dass sie "verschoben oder gelöscht" wurde), ergab, dass es sich tatsächlich um den License Compiler (LC) handelt.

Das Löschen der anstößigen licenses.licx-Datei scheint das Problem behoben zu haben.

0
mono código

Ich habe nach 3-4 Stunden googeln einen Weg gefunden, dies zu umgehen. Ich habe folgendes hinzugefügt

<startup selegacyv2runtimeactivationpolicy="true">
  <supportedruntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>

Wenn dies Ihr Problem nicht löst, dann -> in den Projektreferenzen Right Click on DLL, Wo Sie eine Fehlermeldung erhalten -> Select Properties -> Check the Run-time Version -> wenn dies der Fall ist v2.0.50727 Dann kennen wir das Problem. Das Problem ist: - Sie haben 2.0 Version of respective DLL. Lösung ist: - Sie können delete the respective DLL Aus den Projektreferenzen und dann download the latest version of DLL's Aus der entsprechenden Website auswählen und die Referenz der neuesten Version hinzufügen DLL Referenz dann wird es funktionieren.

0
venu

Fügen Sie an dieser Stelle Folgendes hinzu: C:\Programme (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\x64 Dateiname: sgen.exe.config (Wenn Sie diese Datei nicht finden, erstellen Sie eine und fügen Sie eine hinzu)

 <?xml version ="1.0"?>

<configuration>
 <runtime>        
        <generatePublisherEvidence enabled="false"/>    
    </runtime>

    <startup useLegacyV2RuntimeActivationPolicy="true">

                <supportedRuntime version="v4.0" />

    </startup>    

</configuration>

Dadurch wurde das Problem behoben

0
Muheeb

Ich benutze

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

Es funktioniert aber kurz vor de </configuration> Tag ansonsten funktioniert das Start-Tag nicht richtig

0
RubenP5

Beim Migrieren von Code von VS 2008 nach VS 2010 trat ein ähnliches Problem auf. Das Problem wurde behoben, indem Änderungen an der Datei App.config vorgenommen wurden.

<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"
         sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>
</configuration>
0
Sonali.thecoder