我是MSBuild的新手,想要稍微玩一下,但我无法弄清楚为什么这不起作用.
所以我的解决方案有两个项目:"Model"和"BuildTasks".BuildTasks只有一个类:
using Microsoft.Build.Utilities;
namespace BuildTasks
{
public class Test : Task
{
public override bool Execute()
{
Log.LogMessage( "FASDfasdf" );
return true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在Model.csproj中我添加了这个:
<UsingTask TaskName="BuildTasks.Test" AssemblyFile="$(SolutionDir)src\BuildTasks\bin\BuildTasks.dll" />
<Target Name="AfterBuild">
<Test />
</Target>
Run Code Online (Sandbox Code Playgroud)
我已经设置了构建顺序,因此"BuildTasks"会在"Model"之前构建.但是,当我尝试构建模型时,我收到此错误:
无法从程序集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文件到我的桌面和硬编码路径到我的桌面,它DOES工作,我想不通为什么.
编辑:我没有错路.我修改了BuildTasks的Debug/Release版本,将.dll输出到bin文件夹,因为我不希望Debug/Release有不同的路径.