Я пытаюсь разработать пользовательскую задачу MSBuild и протестировать ее, вызвав ее из другого проекта в том же решении.Первоначально я настроил UsingTask
в тестовом проекте для ссылки на .dll в проекте задачи:
<UsingTask TaskName="FooTask" AssemblyFile="..\Task\bin\$(Configuration)\Task.dll"/>
<Target Name="RunFooTask" BeforeTargets="Compile">
<FooTask/>
</Target>
Это в основном работает.Но часто и, казалось бы, наугад, сборка тестового проекта оставляет проект .dll заблокированным MSBuild и / или Visual Studio, что требует уничтожения мошеннического процесса MSBuild и перезапуска Visual Studio.Это похоже на Visual Studio 2008 блокирует пользовательские сборки задач MSBuild и Visual Studio 2008 блокирует dll в папке bin и не отпускает ее .Но моя задача уже AppDomainIsolatedTask
, и я попытался установить GenerateResourceNeverLockTypeAssemblies
.Это не решает проблему.
Поэтому я попытался добавить ссылку на проект из тестового проекта в целевой проект, думая, что он скопирует DLL в тестовый проект, и UsingTask
может найти его там:
<UsingTask TaskName="FooTask" AssemblyFile="$(OutputPath)Task.dll" />
Этот кажется для решения проблемы с заблокированным .dll.Проблема сейчас в том, что .dll еще не было скопировано при вызове задачи.Если я правильно понимаю, BeforeTargets="Compile"
означает любое время до компиляции, не обязательно непосредственно перед компиляцией.Поэтому я думаю, что мне нужно также указать AfterTargets
с любой целевой копией .dll из указанного проекта. Какая это будет цель?
Кстати, я тоже пытался изменить BeforeTargets="Compile"
на BeforeTargets="Build"
.Теперь .dll копируется до запуска задачи, но это потому, что она запускается после сборки!Я свел это к тестовой цели, которая вообще не включает UsingTask
:
<Target Name="Hello" BeforeTargets="Build">
<Message Importance="high" Text="Hello" />
</Target>
Вывод:
1>------ Rebuild All started: Project: Test, Configuration: Debug Any CPU ------
1> Test -> C:\[redacted]\MSBuildTest2\Test\bin\Debug\Test.exe
1> Hello
Это заставляет меня сомневаться во всем, что я думал о том, что я зналпродолжается.