Эйнар,
Ваш вопрос не прояснил мне, что вы уже написали инструмент, который позволяет внедрить инициализатор модуля в уже скомпилированную сборку.
http://einaregilsson.com/module-initializers-in-csharp
Я попробовал ваше приложение, и оно отлично работает.
Как вы пишете, он должен работать со всеми текущими фреймворками от 2 до 4.5.
Есть только одна проблема, которая делает ваше решение бесполезным для меня:
Ваш инициализатор вызывается, когда приложение первым ДОСТУПАЕТ что-либо в сборке.
Что мне нужно, так это то, что инициализатор модуля должен вызываться немедленно, когда сборка загружается в процесс. Но это не так. Поэтому, если приложение не обращается к сборке, оно никогда не будет инициализировано.
После целого дня исследования мне кажется, что единственный способ добиться этого - написать сборку Managed C ++ и выполнить код в DllMain ().