Какая цель MSBuild копирует .dll из ссылки на проект? - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь разработать пользовательскую задачу 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

Это заставляет меня сомневаться во всем, что я думал о том, что я зналпродолжается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...