Я новичок в MSBuild и хотел немного поиграть с ним, но я просто не могу понять, почему это не работает.
Итак, у моего решения есть два проекта: "Модель" и "BuildTasks". BuildTasks имеет только один класс:
using Microsoft.Build.Utilities;
namespace BuildTasks
{
public class Test : Task
{
public override bool Execute()
{
Log.LogMessage( "FASDfasdf" );
return true;
}
}
}
И затем в Model.csproj я добавил следующее:
<UsingTask TaskName="BuildTasks.Test" AssemblyFile="$(SolutionDir)src\BuildTasks\bin\BuildTasks.dll" />
<Target Name="AfterBuild">
<Test />
</Target>
Я установил порядок сборки, поэтому "BuildTasks" создается до "Модели". Но когда я пытаюсь построить модель, я получаю эту ошибку:
Задача "BuildTasks.Test" не могла загружаться из сборки C:\WIP\TestSolution\SRC\BuildTasks\Bin\BuildTasks.dll. Не удалось загрузить файл или сборку 'Файл:///C:\WIP\TestSolution\SRC\BuildTasks\Bin\BuildTasks.dll' или одной из его зависимостей. Система не может найти указанный файл. Убедитесь, что <UseTask> правильность декларации и что сборка и все ее зависимости доступны.
Этот файл определенно существует, поэтому почему MSBuild не может найти его?
Я даже попробовал жесткое кодирование "C:\WIP\TestSolution" вместо "$ (SolutionDir)" и получил ту же ошибку. Однако, если я скопирую этот .dll на свой рабочий стол и жестко программирую путь к моему рабочему столу, он работает, и я не могу понять, почему.
РЕДАКТИРОВАТЬ. Я не ошибаюсь. Я изменил сборки Debug/Release для BuildTasks, чтобы вывести .dll только в папку bin, так как я не хотел, чтобы Debug/Release имел разные пути.