Eine managed Injection in eine laufende Assembly ist mit einem nativen CLRHost möglich, wie z.B. in diesem Blogpost von mir beschrieben:
Managed FASM, CLRHosting durch C# und natives Detouring


Allerdings wirst Du in einer laufenden Assembly nicht wirklich spass am Injecten des Codes haben.
Mit Mono.Cecil kannst Du "vor dem Ausführen" des Programms Modifikationen vornehmen, danach erst die Assembly starten. Das ist der gänige Weg bei managed Applikationen.

Mono.Cecil ist relativ selbsterklärend. Wenn Du Code in eine Funktion injecten willst, so holst Du dir die dazugehörige MethodDefinition und ändest den Code in MSIL. Dazu hab ich auch mal ein kleinen Blogpost geschrieben, viel Erfolg:
Deobfuscation mit Mono.Cecil