У меня есть структура раствора следующим образом:Закрытая Target ассамблею с Mono.Cecil и PCL Code Injection
**CoreSolution**
|
+---- Core.dll (PCL)
|
+---- CodeInjectionLogic (Inserts IL instruction on each type using Mono.Cecil for PCL)
**BuildSolution**
|
+---- Core.dll (For Project Reference)
|
+---- CustomMSBuildTask.dll (Injects the code into the target.dll)
|
+ ---CodeInjectionTask
Applies CodeInjectionLogic on each Type to weave IL instruction
**TargetSolution**
|
+---- Core.dll (For Project Reference)
|
+---- Target.dll (PCL)
|
+ <using Task CodeInjectionTask....>
Вопрос блокировки для CustomMSBuildTask.dll решается путем копирования всех библиотек DLL на временного управляющего, как событие BeforeBuild ,
Building TargetSolution, который содержит сборку Target и использование Mono.Cecil. Я могу прочитать файл Target.dll, чтобы изменить типы и вставить инструкцию IL, но когда я попытаюсь записать измененный поток обратно с помощью Mono.Cecil.AssemblyDefiniyion. Write() Я всегда получаю сообщение об ошибке от MSBuild
Процесс не может получить доступ к Target.dll, потому что он используется другим процессом. Я предполагаю, что это сам MSBuild.
Любые указатели на то, как я могу использовать Mono.Ceeil и PCL, чтобы сплести сборку целей, которая строится с использованием настраиваемой цели MSBuild AfterBuild.