Предположим, у вас есть сборка A
, содержащая кучу довольно стандартных не обфусканных классов.Ввод кода в .NET
Есть ли способ программно создать какую-то «насмешливую» сборку B
, которая будет содержать все методы, находящиеся в сборке A
, но все эти методы в сборке B должны иметь код пользователя, введенный в начале метода и в конце, так что, когда сборка B
будет выполнена, она будет работать с нормальным + введенным кодом пользователя. Введенный код будет использоваться для профилирования. Можно ли как-то выполнить (я уже использую профилировщик ANTS, поэтому нет необходимости в каких-либо инструментах профилирования, меня просто интересует, можно ли решить проблему указанным способом)
Спасибо!
EDIT
Ребята, я говорю о написании отдельного приложения (аналог http://codeinject.codeplex.com/), способный принимать любые сборки .NET в качестве входных данных и производит другую, которая будет содержать:
- весь код первого один
- специального пользовательского код вводится в каждый метод сборки существ ... Ну, будучи «издевался»
Предположим, что мы имеем следующий код:
AssemblyA.dll:
class Test
{
void Action1(int someArgument)
{
...
}
void Action2(bool someBool)
{
...
}
public void DoSomeAction()
{
Action1(123);
...
Action2(true)
}
}
Injector.dll:
public class Injector: IInjector
{
Dictionary<String, Int32> profiler = new Dictionary<String, Int32>();
void BeforeInvoke(IMethodCall call)
{
Console.WriteLine("A method {0} being called", call.Method.Name);
}
void AfterInvoke(IMethodCall call)
{
Console.WriteLine("A method {0} was called, duration {1}", call.Method.Name, call.Duration);
}
}
Это позволит сделать следующее:
> inject.exe AssemblyA.dll Injector.dll AssemblyB.dll
когда вы ссылаетесь на AssemblyB.dll и используете в производственной среде, он будет делать все, что делает AssemblyA.dll, но также будет выполнять некоторую регистрацию производительности, которая впоследствии может быть проанализирована и проанализирована более dev-like.
Мой вопрос:
Где я должен начать искать?
[Fody] (https://github.com/Fody/Fody) приходит на ум, как описано ниже [PostSharp] (http://www.postsharp.net/) для AoP, а также общая схема перехвата, используемая при использовании IoC. Ни один из них не свободен, как ваш 'inject.exe', но все они являются жизнеспособным механизмом * того, как может быть написано мифическое приложение. –