2009-04-23 3 views
3

Дано: - узел (например, «SomeLib.dll») - текстовый файл (например, «myconfig.xml»)Как добавить ресурс в существующий подписанного сборки

Мне нужно вставлять файл MyConfig. xml в существующую сборку SomeLib.dll

Прежде чем нажимать «Ответ», обратите внимание: я знаю, как встраивать ресурсы во время компиляции (csc.exe ../embedresource: file ...).

Дело в том, что мне нужно встроить ресурс после сборка создана.

Возможно ли это?

Я также знаю о ILMerge. Но он не нашел, как это может помочь.

ответ

1

Вы можете использовать Cecil для этого: загрузить сборку, добавить ресурс, сохранить сборку.

+1

Вы можете поделиться кодом, в котором вы закончили? Я играл с Сесилом, но не смог получить его, чтобы фактически сохранить ресурсы. Благодарю. – BarrettJ

0

Вам нужно будет уйти из сборки после добавления ресурса. Весь смысл подписания сборки заключается в том, чтобы запретить людям изменять содержимое сборки без возможности сказать, что она была изменена. Вы можете использовать signcode.exe, http://msdn.microsoft.com/en-us/library/9sh96ycy(VS.80).aspx, чтобы уйти из сборки после добавления ресурса, если у вас есть соответствующие сертификаты.

+0

Отказ от сборки не является проблемой. ILMerge прекрасно это делает. Вопрос заключался в том, как добавить ресурс в существующую сборку с перекомпиляцией всех источников. – Shrike

0

Assembly Linker tool может использоваться для объединения модулей и ресурсов в подписанную сборку. Однако я не смог найти способ использовать существующую сборку в качестве входных данных.

> al.exe SomeLib.module /out:SomeLib.dll /keyfile:SomeLib.snk /embed:myconfig.xml 
+0

Я тоже. Я посмотрел на al.exe и не нашел, как это может помочь. Только если найти способ получить * .module из существующего .dll ...: -/ – Shrike

0

Возможно, вы можете использовать Resource Hacker для автоматизации модификации сборки из командной строки (их учебник включает примеры, как автоматизировать). После изменения вам просто нужно уйти в отставку.