Announcement

Collapse
No announcement yet.

Der Wert des Typs kann nicht konvertiert werden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Der Wert des Typs kann nicht konvertiert werden

    Ich habe eine Projektmappe mit 5 Projekten. 2 Webanwendungen und 3 Projekte, die nur als Klassensammlungen dienen. Die beiden Webanwendungen haben Verweise auf die drei *.dll Dateien, die durch die drei Klassensammlungen erstellt werden. Wenn ich alles ausführe dann kommt die Fehlermeldung "Der Wert des Typs "Insotypen.Zeitkarte" kann nicht zu "Insotypen.Zeitkarte" konvertiert werden."
    Die Fehlermeldung entsteht beim Erstellen der Projekte beim Aufruf einer Methode, die Daten von einem Server abfragt und sie als Typ "Zeitkarte" speichert. Sowohl die Methode als auch die Klasse "Zeitkarte" befinden sich in den Klassensammlungen. Der Methodenaufruf befindet sich mehrfach in den Hauptprojekten.

    Wenn ich die 3 Klassensammlungen aus der Projektmappe entferne und nur die Verweise auf die drei erzeugten *.dll Dateien drinlasse dann funktioniert alles, aber das reicht mir natürlich nicht.

    Ich bin mit meinem Latein am Ende. Weiss jemand eine Lösung, warum diese Fehlermeldung kommt oder hat jemand schonmal die selbe Fehlermeldung gehabt?

    Danke im Vorraus

  • #2
    Hallo,

    verwenden die Klassensammlungen Strong Names und automatisch hochzählende Versionsnummern

    Comment


    • #3
      Es tut mir leid, mit dem Begriff Strong Names kann ich nichts anfangen. Ob die Sammlungen Versionsnummern haben und wie diese gezählt werden weiss ich leider auch nicht.

      Ich habe aber noch vergessen zu erwähnen, dass der Code selbst korrekt ist. Es kann also nicht daran liegen, dass die Klasse oder die Methode falsch programmiert ist. Theoretisch dürfte das Problem also gar nicht auftreten. Und gerade das IST mein Problem..

      Comment


      • #4
        Nach langem rumprobieren habe ich festgestellt, dass es funktioniert, wenn nur eines der beiden Hauptprojekte in der Projektmappe ist. Ebenso funktioniert es, wenn beide Hauptprojekte mit den Verweisen zu den dlls aber keine Klassensammlungen in der Projektmappe sind. Wenn alle 5 Projekte in der Projektmappe sind (wie ich es brauche), dann kommt die Fehlermeldung beim Erstellen. Ich bin verwirrt..

        Comment


        • #5
          Hallo,

          >..Ob die Sammlungen Versionsnummern haben ...

          Diese Frage beantwortet ein Blick in die Datei <b>AssemblyInfo.vb</b>. Dort wird die Versionsnummer und der Strong Name über Attribute festgelegt:
          <pre>
          ' You can specify all the values or you can default the Build and Revision Numbers
          ' by using the '*' as shown below:
          <Assembly: AssemblyVersion("1.0.*")>

          <Assembly: AssemblyKeyFile("..\..\StrongName.snk")>
          </pre>

          Die CLR identifiziert einen Type über den vollständig qualifizierten Namen (Assembly, Namespace, Version, Culture Info und Public Key). Wenn auch nur einer dieser Teile sich ändert, muss die CLR von einem anderen Type ausgehen (da später die Serialisierung nicht funktionieren würde).

          Wenn eine .NET-Anwendung eine externe Assembly einbindet, wird die Versionsnummer und der Public Key aus dem Manifest ausgelesen und in die eigene Referenz-Auflistung kopiert. Wenn die Projektmappe compiliert wird und dabei die Versionsnummern automatisch bei jedem Compilerlauf hochgezählt werden, passen die Daten aus der Referenz-Auflistung nicht mehr zu den Manifest-Einträge der frisch compilierten Klassensammlungen. Die Fehlermeldung <i>"Der Wert des Typs "Insotypen.Zeitkarte" kann nicht zu "Insotypen.Zeitkarte" konvertiert werden." </i> sagt nichts anderes aus, als das in den beteiligten Assemblies das Gebilde <i>Insotypen.Zeitkarte</i> jeweils in einer eigenen Fassung (Type) vorliegt.

          Um dieses Problem zu lösen, gibt es 2 Möglichkeiten:

          1. Die Hauptanwendung bindet nach jedem neuen Compilieren der Klassensammlungen diese Assembly <b>neu</b> als Verweis ein.

          2. Es wird eine feste Versionsnummer eingetragen, so dass ein neuer Compilerlauf nicht zu einem neuen Type führt:

          <Assembly: AssemblyVersion("1.0.<b>0.0</b>")>
          &#10

          Comment


          • #6
            Vielen Dank für den Tipp, das wusste ich noch nicht! Leider war es aber auch nicht des Rätsels Lösung.
            Ich glaube ich werde auf eine alte noch funktionierende Version zurückgreifen und die Veränderungen zur aktuellen Version nach und nach neu einfügen bis der Fehler erneut auftritt, um festzustellen wo der Fehler liegt

            Comment


            • #7
              Hallo!

              Um diesen Fehler zu vermeiden empfehle ich Dir Eigene, einzubindende .dll's ein einem eigenständigen Projekt zu halten und seperat vom Application-Project zu erstellen.

              Gruß<br>
              &nbsp;&nbsp;&nbsp;Nico Stöckigt<br>
              <br&gt

              Comment

              Working...
              X