Я новичок в MSBuild и хотел немного поиграть с этим, но я просто не могу понять, почему это не работает.
Итак, у моего решения есть два проекта: «Модель» и «Задачи сборки». У 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'
или одна из его зависимостей. Система
не могу найти указанный файл.
Подтвердите, что
декларация верна, и что
сборка и все ее зависимости
имеется.
Этот файл определенно существует, так почему MSBuild не может его найти?
Я даже пытался жестко кодировать «C: \ WIP \ TestSolution» вместо «$ (SolutionDir)» и получал ту же ошибку. Однако, если я скопирую этот .dll на свой рабочий стол и жестко закодирую путь к нему, он ДЕЙСТВУЕТ , и я не могу понять, почему.
РЕДАКТИРОВАТЬ : Я не ошибся в пути. Я изменил сборки Debug / Release для BuildTasks, чтобы выводить .dll только в папку bin, так как я не хотел, чтобы Debug / Release имел разные пути.