Я разрабатываю пользовательскую задачу MSBuild, которая создает ORM layer и использует ее в проекте. Мне мешает поведение Visual Studio в отношении DLL задач MSBuild и не отпускать.Visual Studio 2008 блокирует пользовательские сборки MSBuild Tasks
Я хотел бы организовать свое решение таким образом;
My Solution
|
+- (1) ORM Layer Custom Task Project
| |
| +- BuildOrmLayerTask.cs // here's my task
|
+- (2) Business Logic Project // and here's the project that uses it.
|
+- <UsingTask TaskName="BuildOrmLayerTask" AssemblyFile="$(TaskAssembly)" />
Однако, когда проект (2) строит, он фиксируется на сборке из проекта (1). Так что теперь я не могу построить проект (1) снова, не закрывая решение и не открывая его.
Можно ли каким-либо образом организовать так, чтобы задача пользовательской сборки не была заблокирована Visual Studio?
Запуск другого процесса msbuild.exe, по-видимому, является единственным решением, которое работает. Я не вижу, как расширение AppDomainIsolatedTask должно работать в этой ситуации, поскольку MSBuild уже загрузил сборку в основной AppDomain к моменту, когда он пытается прочитать типы. В самом файле проекта должен быть способ сообщить MSBuild о загрузке задачи в другой AppDomain. Microsoft отказывается исправить эту серьезную проблему из-за производительности с использованием новых AppDomains - хорошо, давайте переопределим опцию и решим для себя? Почему такая сложная проблема для MS «инженеров» исправить? – makhdumi
Расширение AppDomainIsolatedTask не работает для меня. – Fosna
Вам не нужно создавать отдельный проект MSBuild. Вы можете просто поставить условие на свою цель и сделать цель «BeforeBuild» выполнить текущий проект с некоторыми параметрами, например. '' и ' '. –
Stijn