我是 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”在“模型”之前构建。但是当我尝试构建模型时,我得到了这个错误:
无法从程序集 C:\WIP\TestSolution\src\BuildTasks\bin\BuildTasks.dll 加载“BuildTasks.Test”任务。无法加载文件或程序集 'file:///C:\WIP\TestSolution\src\BuildTasks\bin\BuildTasks.dll' 或其依赖项之一。该系统找不到指定的文件。确认 <UsingTask> 声明正确,并且程序集及其所有依赖项都可用。
这个文件肯定存在,为什么MSBuild找不到呢?
我什至尝试用硬编码“C:\WIP\TestSolution”代替“$(SolutionDir)”并得到同样的错误。但是,如果我将该 .dll 复制到我的桌面并将路径硬编码到我的桌面,它确实可以工作,我不知道为什么。
编辑:我没有路径错误。我修改了 BuildTasks 的 Debug/Release 构建以将 .dll 输出到 bin 文件夹,因为我不希望 Debug/Release 具有不同的路径。