2009-04-20 12 views
0

Ich habe mich lange umgesehen und kann keine Informationen zum Ändern verwalteter Ressourcen in Assemblys finden (beachten Sie, dass ich bereits mit Win32-Ressourcen und den APIs zur Änderung dieser vertraut bin).Wie kann ich Ressourcen in CLR-Assemblys hinzufügen, löschen und aktualisieren?

Meine Anwendung verfügt über Ressourcen, die vom Endbenutzer aktualisiert werden müssen, und die Anwendung wird als einzelne ausführbare Datei verteilt (so kann ich nicht einfach Satelliten-Assemblies verwenden).

Ich sehe ein paar mögliche Abhilfen, aber sie scheinen hackish:

Die erste ist ILMerge zu verwenden: Ich habe eine neue Baugruppe im Speicher schaffen würde, die die neuen Ressourcen enthält und verwenden ILMerge es zu kombinieren mit der Originalmontage zum neuen Programm. Der einzige Nachteil ist, dass Ressourcen nicht aktualisiert oder gelöscht werden können.

Die zweite ist etwas ähnlich: Es würde ein .netmodule (aus dem C# -Compiler), die gegen al.exe mit dem/embed-Schalter ausgeführt wird, um die Ressourcen zum Bilden der neuen Assembly hinzufügen. Der Nachteil ist, dass keine Ressourcen in der ursprünglichen Assembly vorhanden sind.

Ich bin auf die Option ILMerge gelehnt, aber die Bedingungen für die Neuverteilung sind mehrdeutig. Die EULA nimmt keinen Bezug auf Umverteilungsrechte (so nehme ich an, dass es in dieser Negativ Freedom Gesellschaft erlaubt ist), aber die Microsoft Research Seite sagt Umverteilung ist nicht erlaubt (aber es ist zweideutig formuliert, von dem, was ich sagen kann, könnte es sich auf kommerzielle Umverteilung beziehen, was für mich nicht gelten würde, da es sich um ein gemeinnütziges GPL-Projekt handelt).

Dank

Antwort

1

IMHO, ich glaube nicht, es ist eine gute Idee, es trotzdem zu tun. Wenn diese Ressourcen tatsächlich Benutzerdaten sind, gehört sie selbst dann nicht zu einer eingebetteten Ressource, wenn eine "vorinstallierte" Menge davon vorhanden ist.

Sind Ihre Baugruppen signiert? Sie müssten sie nach der Änderung zurücktreten, Ihr privater Schlüssel wird offengelegt und jeder kann Ihre Bewerbung unterschreiben. Es lohnt sich also nicht, es zu unterschreiben, und Sie haben trotzdem ein Sicherheitsrisiko.

Verschieben Sie Ihre Ressourcen in eine externe Datei. Sie können weiterhin die "vordefinierten" Ressourcen einbetten. Beim ersten Start Ihrer Anwendung erstellen Sie die externe Datei und kopieren die eingebetteten Ressourcen in die externe Datei. Wenn die externe Datei vorhanden ist, interessiert Sie die eingebetteten Ressourcen nicht mehr.