我在Visual Studio中有一个项目“ Project1”,其中包含一个实现Microsoft.Build.Utilities.Task的类。我希望在构建Project1之后执行此任务。
在“ Project1”的项目文件中,我具有以下内容:
<UsingTask
AssemblyFile="$(MSBuildThisFileDirectory)bin\Debug\net462\Project1.dll"
TaskName="MyTask"/>
<Target Name="ExecuteMyTask" AfterTargets="Build">
<MyTask/>
</Target>
当我构建Project1时,它尝试在构建后执行MyTask,但似乎无法找到Project1.dll(即使在构建后就存在了并且路径正确),也出现了以下错误: :“未找到” MyTask“任务”
如果我第二次构建,则一切正常,前提是假定dll在过程开始时就已存在。即使目标是使用AfterTargets =“ Build”声明的,它似乎仍试图在构建步骤之前寻找dll。
如何在构建后执行此任务?
答案 0 :(得分:0)
确保you copy the Project1.dll to bin\Debug\net462 folder
的设置输出路径的方式。原因是构建过程中的顺序为:compile the code to .cs in obj folder
=> copy the assembly from obj to bin folder
。我不确定您是否有第三项操作,如using target or post-build event
,将程序集从bin\Debug
复制到bin\Debug\net462
,因此请先尝试通过设置OutputPath
属性来实现。
我敢肯定,如果我们用声明AfterTargets
定义自定义目标,那么在大多数时候执行目标时,它都能找到程序集。但这可能会受到其他因素的影响:装配太大,机器旧了或...避免这种情况的一件事是创建一个新项目,然后进行测试。另外,请确保<Using Task> and <Target>
的位置在.csproj的底部。
注意:当<Using Task>
尝试使用该程序集时,请确保该程序集未被其他进程占用。