Как я могу добавлять, удалять и обновлять ресурсы в сборках CLR? - PullRequest
0 голосов
/ 20 апреля 2009

Я долго осматривался и не могу найти никакой информации об изменении управляемых ресурсов в сборках (обратите внимание, что я уже знаком с ресурсами Win32 и API для их изменения).

Мое приложение имеет ресурсы, которые должны обновляться конечным пользователем, и приложение будет распространяться как один исполняемый файл (поэтому я не могу просто использовать спутниковые сборки).

Я вижу несколько возможных обходных путей, но они кажутся хакерскими:

Первое - это использовать ILMerge: я бы создал новую сборку в памяти, которая содержит новые ресурсы, и использовал бы ILMerge, чтобы объединить его с исходной сборкой для формирования новой программы. Единственным недостатком является то, что ресурсы не могут быть обновлены или удалены.

Второе несколько похоже: будет .netmodule (из компилятора C #), который запускается против al.exe с ключом / embed, чтобы добавить ресурсы для формирования новой сборки. Недостатком является то, что ни один из ресурсов в исходной сборке не будет присутствовать.

Я склоняюсь к варианту ILMerge, но условия перераспределения неоднозначны. Лицензионное соглашение не ссылается на права на перераспределение (поэтому я предполагаю, что в этом обществе негативной свободы это разрешено), но на странице исследования Microsoft говорится, что перераспределение не разрешено (но оно двусмысленно сформулировано, насколько я могу судить, это может относиться к коммерческому перераспределению, что не относится ко мне, так как это некоммерческий проект GPL).

Спасибо

1 Ответ

1 голос
/ 20 апреля 2009

ИМХО, я не думаю, что это все равно хорошая идея. Если эти ресурсы на самом деле являются пользовательскими данными, даже если существует их «предварительно установленный» набор, они не принадлежат встроенному ресурсу.

Вы подписаны сборками? Вам придется их подать в отставку после изменения, ваш закрытый ключ открыт, и каждый может подписать ваше заявление. Так что подписывать его не стоит, и у вас все равно есть угроза безопасности.

Переместите ваши ресурсы во внешний файл. Вы все еще можете встраивать «предопределенные» ресурсы. При первом запуске приложения вы создаете внешний файл и копируете встроенные ресурсы во внешний файл. Если внешний файл существует, вам больше не нужны встроенные ресурсы.

...