Я думаю, что единственный способ сделать это без перезапуска приложения - это, вероятно, нажать на машинный код, выдвинутый JIT; но тогда вам действительно будет очень весело найти то, что вы ищете, не говоря уже о работе с измененными типами, а также обо всех различных JIT-оптимизациях, которые происходят. Затем вам нужно подумать о том, как бы вы справились с динамической генерацией кода (ее больше, чем вы могли бы подумать) и с динамическими методами, которые можно собирать мусором.
Вы также можете написать свой собственный .Net host + JIT; но тогда я сомневаюсь, что вы бы убедили кого-либо запустить его сознательно .
Вы, конечно, не сможете изменить IL загруженной сборки, потому что .Net защищает ее после загрузки. Я предполагаю, что возможно какое-нибудь грязное (с акцентом на неприятное там) низкоуровневое приложение, которое полностью обходит .Net может быть способным взломать IL в памяти; но я сомневаюсь, что представление в памяти при загрузке для выполнения такое же, как и на диске; и даже если к тому времени, когда вы «взломали», это, вероятно, все равно было JITted, и поэтому любые ваши изменения не будут иметь никакого значения.
В конечном итоге .Net специально разработан для предотвращения того, о чем вы говорите. Вы можете прикрепить (статические) динамические методы к существующим типам и т. Д., Чтобы получить выгоду от видимости (если у вас есть разрешение), но изменяете загруженный код? Нет.
Как уже упоминалось в нескольких других ответах, вы обычно делаете это с помощью сборки на диске, и для этого существует множество инструментов.
Но тогда что вы собираетесь делать со сборками со строгим именем? Вы должны быть в состоянии оставить их с тем же ключом строгого имени, который использовался первоначально; и почему-то я сомневаюсь, что у тебя будет к этому доступ.