Laden...

TypeLoadException

Erstellt von Nelson vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.666 Views
N
Nelson Themenstarter:in
26 Beiträge seit 2010
vor 13 Jahren
TypeLoadException

Hallo,

ich habe in einem Assembly eine Klasse, die wie folgt definiert ist:

namespace LostSale.Model
{
    public class Globals
    {
        // Parameters from SMS
        public static string GCustomerID { get; set; }
        .
        .
     }
}

Wenn ich dieses Assembly in einem anderen Projekt referenziere und die Variable "GCustomerID" anspreche, dann erhalte ich eine TypeLoadException:

Der Typ LostSale.Model.Globals in der Assembly LostSale, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null konnte nicht geladen werden .

Die .dll ist korrekt eingebunden und im "Object Browser" wird die Klasse "Globals" auch angelistet.

Wenn ich nur eine Instanz dieser Klasse erstelle, dann wird keine TypeLoadException ausgelöst.

Warum ist das so ?

thx,
Nelson

4.941 Beiträge seit 2008
vor 13 Jahren

Wird diese statische Variable denn innerhalb der Assembly selber benutzt? Evtl. ist sie ja wegoptimiert worden?

A
69 Beiträge seit 2010
vor 13 Jahren

@Th69:
ganz sicher nicht. Wegoptimiert wird nur was 100% weg darf. public static darf nciht weg.

Häng dich mal ins assemblyresolve ereigniss deiner appdomain und schau dir mal genauer an was da schief läuft... evtl ist es ja eine abhängigkeit oder aber es ist ein geändertes interface, das nicht nachgezogen wurde.

N
Nelson Themenstarter:in
26 Beiträge seit 2010
vor 13 Jahren

Es lag daran, daß der "Assembly name" in den Properties (unter Application) bei der LostSale.dll und bei der LostSale.exe, die das LostSale.dll nutzt, identisch war.

Wenn ich unterschiedliche Namen verwende gehts.

Kann jemand erklären warum das zum Problem führt ?

A
69 Beiträge seit 2010
vor 13 Jahren

egal ob dll oder exe. es ist eine assembly und die CLR kann beides laden und sucht sogar explizit nach beiden, wenn er was laden muss. Er hat also beim suchen festgestellt, das er diese assembly bereits gladen hat und hat versucht zuzugreifen, was aber gekracht hat.