Announcement

Collapse
No announcement yet.

Assembly signieren?

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

  • Assembly signieren?

    Hallo zusammen,

    ich habe mir meine eigene Assembly geschrieben, habe jedoch erhebliche Probleme Programme, die auf diese Assembly zurückgreifen zum laufen zu bringen?

    Muss ich die Assembly signieren? Wenn ja, wie geht das genau? Kann mir da vielleicht jemand helfen oder eine Ressource zu geben.
    Oder kann der Fehler auch noch eine andere Ursache haben?

    Danke

    Mit freundlichen Grüßen
    Pascal P.

  • #2
    Hallo,

    >..jedoch erhebliche Probleme ...

    wie machen sich diese bemerkbar?

    >Muss ich die Assembly signieren?

    Eine Assembly <b>muss</b> nur dann zwingend signiert werden, wenn diese Assembly im <i>Global Assembly Cache</i> (GAC) abgelegt werden soll. Ansonsten ist das Kennzeichnen über den <i>Strong Name</i> optional.

    &gt;Wenn ja, wie geht das?

    Über das Assembly-Attribut <b>AssemblyKeyFile</b> wird der Dateiname der generierten SNK-Datei definiert. Vorher muss man sich einmalig (d.h. alle eigenen Assemblies können mit der gleichen privaten Schlüsseldatei signiert werden) die SNK-Datei über das Kommandozeilentool SN.EXE aus dem .NET Framework erzeugen: <i>sn -k ES.snk</i>.
    <pre>
    ...
    [assembly: AssemblyDelaySign(False)]
    [assembly: AssemblyKeyFile('ES.snk')]
    [assembly: AssemblyKeyName('')]
    ...
    </pre>

    &gt;Oder kann der Fehler auch noch eine andere Ursache haben?

    Wenn ein Delphi 8-Programm (Assembly) eine andere Delphi 8-Assembly (DLL) als Verweis einbindet, so dürfen <b>beide</b> Teile nur <b>eine einzige</b> Delphi 8-Runtime (<i>Borland.Delphi.dll</i>) aktivieren. Alle beteiligten Delphi 8-Assemblies (Programm und alle DLLs) müssen gegen die Delphi 8-Runtime gelinkt werden, aber keine dieser Assemblies darf Borland.Delphi.dll statisch einbinden (d.h. im Objektinspektor darf die Eigenschaft <b>Link Units</b> für Borland.Delphi.dll nicht auf True gesetzt werden)

    Comment


    • #3
      > wie machen sich die Probleme bemerkbar?

      Die machen sich so bemerkbar, dass sobald ich meine Assembly in das Projekt mit einbinde sich das Programm auf einem anderen PC, der nur das Framework 1.1 (also ohne SDK) installiert hat, nicht starten lässt.
      Ich bekomme dann immer eine Fehlermeldung und wenn ich dann auf Abbrechen klicke u´m zu debuggen, bekomme ich eine weitere Fehlermeldung "Debuggen hat nicht geklappt".

      > Assembly signieren?

      Nach dem was du gesagt hast, gehe ich davon aus, das es in meinem Fall nicht nötig ist die Assembly zu signieren?

      > Andere Fehler?

      Also bei mir sieht das ganze so aus. Ich habe 2 Assemblies. Die eine wird von der einen Abgeleitet. Ich habe in beiden Assemblies die Borland.Delphi.dll gegen die Delphi Runtime gelinkt. Dann habe ich beide Assemblies in mein Projekt eingebunden. In dem Projekt selbst habe ich die Borland.Delphi.dll auch gegen die Runtime gelinkt. Habe das dann so kompiliert. Auf meinem eigenen Entwicklungs PC kann ich das Programm starten, kann auch auf die Assemblies zugreifen. Aber auf dem anderen PC lässt sich das Programm wie bereits gesagt nicht starten. Und wie gesagt, möchte ich dann debuggen, bekomme ich die Fehlermeldung "Der registrierte JIT - Debugger ist nicht verfügbar. Das starten eines JIT - Debuggers mit folgendem Befehl gab...&quot

      Comment


      • #4
        Hallo,

        &gt;Ich bekomme dann immer eine Fehlermeldung ..

        was steht da genau drin

        Comment


        • #5
          Die Fehlermeldung sieht ungefähr so aus:

          <i><b>
          Die Caption der Meldung ist:
          Project1.exe - Common Language Runtime Debugging Service

          Im Body der Message steht dann folgendes:
          Die Anwendung hat einen Ausnahmefehler verursacht, der nicht verarbeitet werden konnte.

          Prozess-ID=0x130(304), Thread-ID=0x528(1320)

          Klicken Sie auf OK um die Anwendung abzubrechen, oder auf Abbrechen um zu debuggen.
          </b></i>

          Und wenn ich dann auf Abbrechen klicke, um zu debuggen bekomme ich wie gesagt wieder eine Fehlermeldung:

          <i><b>Caption der Message:
          Project1.exe - Kein Debugger gefunden
          Der registrierte JIT - Debugger ist nicht verfügbar. Das Starten des JIT - Debuggers mit folgendem Befehl gab folgenden Fehlercode zurück 0x02(2). Überprüfen Sie Ihre Computereinstellungen.

          cordbg.exe !a0x130

          Klicken Sie auf wiederholen...</b></i&gt

          Comment


          • #6
            Hallo,

            das sieht so aus, als ob kein globaler Exception-Handler im Programm aktiv ist. Wenn es sich um eine FCL-Anwendung (Windows Forms) handelt, würde ich zuerst einen eigenen Exception-Handler in die Projektdatei (*.dpr) hinzufügen, damit alle Exception-Meldungen sowie der Stack-Trace sichtbar werden:
            <pre>
            <b>procedure</b> OnThreadException(sender: TObject;
            t: ThreadExceptionEventArgs);
            <b>var</b>
            aSB : StringBuilder;
            aExc: Exception;
            <b>begin</b>
            aSB := StringBuilder.Create;
            aExc := t.Exception;
            <b>while</b> aExc &lt;&gt; <b>nil</b> <b>do</b>
            <b>begin</b>
            aSB.Append(aExc.GetType.ToString + Environment.NewLine);
            aSB.Append(aExc.Message + Environment.NewLine);
            aSB.Append(aExc.StackTrace + Environment.NewLine);
            aExc := aExc.InnerException
            <b>end</b>;
            MessageBox.Show(aSB.ToString);
            <b>end</b>;
            <br>
            [STAThread]
            <b>begin</b>
            Include(Application.ThreadException, OnThreadException);
            Application.Run(TWinForm1.Create);
            <b>end</b>.
            </pre&gt

            Comment

            Working...
            X