2009-04-20 8 views
0

J'ai jeté un coup d'oeil autour et je ne trouve aucune information sur la modification des ressources managées dans les assemblages (notez que je suis déjà familier avec les ressources Win32 et les API pour les modifier).Comment puis-je ajouter, supprimer et mettre à jour des ressources dans les assemblages CLR?

Mon application a des ressources qui doivent être mises à jour par l'utilisateur final et l'application sera distribuée sous la forme d'un seul exécutable (je ne peux donc pas utiliser uniquement des assemblys satellites).

Je vois quelques solutions de contournement possibles, mais ils semblent hackish:

La première consiste à utiliser ILMerge: Je crée une nouvelle assemblée en mémoire qui contient les nouvelles ressources et d'utiliser ILMerge à combiner avec la assemblage original pour former le nouveau programme. Le seul inconvénient est que les ressources ne peuvent pas être mises à jour ou supprimées. La seconde est un peu similaire: Il y aurait un .netmodule (émis par le compilateur C#) qui est exécuté sur al.exe avec le commutateur/embed pour ajouter les ressources pour former le nouvel assemblage. L'inconvénient étant qu'aucune des ressources de l'assemblage d'origine ne serait présente.

Je penche vers l'option ILMerge, mais les termes sur la redistribution sont ambigus. Le CLUF ne fait aucune référence aux droits de redistribution (donc je suppose dans cette société de la liberté négative qu'elle est permise) mais la page Microsoft Research dit que la redistribution n'est pas permise (mais elle est ambiguë, d'après ce que je peux dire ce qui ne s'appliquerait pas à moi puisqu'il s'agit d'un projet GPL sans but lucratif).

Merci

Répondre

1

à mon humble avis, je ne pense pas que ce soit une bonne idée de le faire de toute façon. Si ces ressources sont en fait des données utilisateur, même s'il existe un ensemble "préinstallé", elles n'appartiennent pas à une ressource incorporée.

Êtes-vous des assemblages signés? Vous devrez les démissionner après avoir changé, votre clé privée est exposée et tout le monde peut signer votre demande. Donc, ça ne vaut pas la peine de le signer et vous avez un risque de sécurité de toute façon.

Déplacez vos ressources vers un fichier externe. Vous pouvez toujours intégrer les ressources "prédéfinies". La première fois que votre application démarre, vous créez le fichier externe et copiez les ressources intégrées dans le fichier externe. Si le fichier externe existe, vous ne vous souciez plus des ressources intégrées.

Questions connexes