La modalità mista di assemblaggio [log4net] non verrà caricato in .NET 4.0, non funzionerà quando ricompilato per .NET 4.0

StackOverflow https://stackoverflow.com/questions/4199101

Domanda

Odio fare una domanda che è stato chiesto qui innumerevoli volte, come pure stato bloggato su tutto il luogo, ma non riesco ancora a ottenere il mio progetto aggiornato al lavoro.

La mia domanda è stato originariamente scritto in VS2008, il targeting NET 3.5 SP1. Ho appena aggiornato a VS2010, e pensato che mi piacerebbe provare a sfruttare le nuove funzionalità del linguaggio e integrato MEF, così ho cambiato tutti i miei progetti per indirizzare NET 4.0. Dopo aver ottenuto tutto (come eventi post costruire, riferimenti MEF, e cose del genere) impostato correttamente e compilare correttamente, mi sono imbattuto la mia domanda e ho ottenuto il sempre famoso errore:

La modalità mista di assemblaggio è costruito contro la versione 'v2.0.50727' del runtime e non possono essere caricati nel runtime 4.0 senza informazioni di configurazione aggiuntive.

Ho poi aggiunto il seguente attributo al mio elemento <startup> in app.config:

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

Ma quando eseguo la mia applicazione, ho ancora lo stesso errore. C'è qualcosa che posso fare per eseguire il debug ulteriormente questo problema? Ho letteralmente ho idea che altro per provare. Sto cercando di trovare quante più informazioni che posso su assemblee in modalità mista e il modo in cui interagiscono con il CLR, ma la mia conoscenza di fondo in questo settore è limitata al meglio.

Ho anche cercato di aggirare il problema ricompilazione di log4net di origine a destinazione NET 4.0, ma che non ha funzionato il modo in cui avevo sperato. Dopo la compilazione, ho ottenuto questo errore:

regole di sicurezza di eredità violata mentre l'override membro: 'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData (System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'. Sicurezza accessibilità del metodo di override deve corrispondere l'accessibilità di sicurezza del metodo viene sovrascritto.

Così ho trovato un post che ha raccomandato il tentativo di aggiungere la seguente riga alla AssemblyInfo.cs:

[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]

E quando l'ho fatto, ho finito di nuovo a destra dove ho cominciato! (Con l'errore di assemblaggio modalità mista).

Ugh.

È stato utile?

Soluzione

Ho finito per ottenere tutto al lavoro dopo la ricompilazione la fonte, il targeting NET 4.0. Io ancora non così perché tutti dicono che dovrebbe funzionare. L'unica cosa che ho anche dovuto fare per ottenere l'applicazione per eseguire finalmente era di usare MEF2 da CodePlex, e non quello integrato in .NET 4.0. Non vedo il motivo per cui queste due cose sarebbero state collegate, ma tornerò e cercherò di farlo funzionare con log4net così com'è. Vi posto i dettagli qui una volta ho finito, e speriamo che aiutare qualcun altro che ha incontrato lo stesso problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top