Nochmal Assemblies - signieren und Einfach- Mehrfachassemblies



  • Puh - also ich bin über ein Problem mit global Exception Handlers auf ein nettes, kleines Tool gestossen: FxCop. Dieses sieht sich die kompilierten Dateien an und gibt Warnungen aus. Naja... darüber sah ich eben, dass ich die .exe Datei und die .dll Assemblies(? - sollten das nicht .cs Dateien sein?) doch signieren sollte, weil es sonst zu ziemlichen Problemen auf anderen Rechnern kommen könnte.

    Also habe ich einen Schlüssel erstellt (sn -k KeyPair.snk) und diesen dann auch brav in die Projekteigenschaften eingetragen.

    Aber *vorher* habe ich dann auch gleich noch die Standard(sprach)assembly (lang.en.resources) eingebettet...

    Effekt ist: Die Sprachassembly wird immer noch als .dll kompiliert - warum? Sollte die nicht in der .exe Datei enthalten sein?
    Was habe ich da vergessen?

    Naja - wenn ich nun das KeyPair ins Project aufnehme, dann ist (laut FxCop) die .exe signiert und hat somit ihren StrongName. Aber die .dll's eben nicht... und die werden dann natürlich auch nicht mehr geladen.

    Wie kann ich nun in VS-C++ Express auch noch die .dll's signieren (also möglichst automatisch - ich möchte ja nicht bei jedem Kompilevorgang händisch die .dll's neu signieren)?
    Falls das nicht automatisch geht - wie mache ich das manuell?
    Ich finde mich da nicht zurecht.



  • Also es ist nicht das zu finden, was mir noch fehlt.

    In die Resourcen-Dateien kann ich den Text ja nicht schreiben, da dann resgen Schluckauf bekommt:

    using namespace System;
    using namespace System::Reflection;
    
    [assembly:AssemblyKeyFileAttribute("KeyPair.snk")];
    

    Wenn ich eine Datei mit Namen lang.resources und diesem Inhalt erstelle, dann hilft das nicht.

    Arbeitet denn hier niemand mit signierten Assemblies (oder niemand mit der Express Edition)?

    Vielleicht hätte jemand eine Beispieldatei, wie sie ein Wizard erstellt?

    P.S.: Mit /DELAYSIGN ändert das leider auch nichts, da dann einfach kein Platz in der .dll für den Schlüssel ist.



  • Geschafft!

    Das in lang.cpp geschrieben:

    #include "stdafx.h"
    
    using namespace System;
    using namespace System::Reflection;
    using namespace System::Runtime::CompilerServices;
    using namespace System::Runtime::InteropServices;
    using namespace System::Security::Permissions;
    
    [assembly:AssemblyKeyFileAttribute("KeyPair.snk")];
    
    [assembly:AssemblyTitleAttribute("lang")];
    [assembly:AssemblyDescriptionAttribute("")];
    [assembly:AssemblyConfigurationAttribute("")];
    [assembly:AssemblyCompanyAttribute("xp")];
    [assembly:AssemblyProductAttribute("Programmname")];
    [assembly:AssemblyCopyrightAttribute("Copyright (c) xp 2006")];
    [assembly:AssemblyTrademarkAttribute("")];
    [assembly:AssemblyCultureAttribute("")];
    
    [assembly:AssemblyVersionAttribute("1.0.*")];
    
    [assembly:ComVisible(false)];
    
    [assembly:CLSCompliantAttribute(true)];
    
    [assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];
    

    ... und es funktioniert.

    Nur - wie kann ich nun auch den Namen der .dll noch selbst bestimmen bzw. das alles in die eine .exe Assembly hinein bringen? Mit "einbetten" in den Projekteigenschaften hat das noch nicht geklappt.


Anmelden zum Antworten