【发布时间】:2019-11-23 23:03:46
【问题描述】:
我在 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 在进程开始时已经存在。即使 Target 是用 AfterTargets="Build" 声明的,它似乎也试图在构建步骤之前查找 dll。
如何在构建后执行此任务?
【问题讨论】:
-
在此过程中,您何时将 Project1.dll 放入
bin\debug\net462文件夹? -
是的,这就是它的构建目标。我知道路径是正确的,因为它在第二次构建时找到了它。
-
对不起,如果问题不清楚,dll是Project1的编译输出。我无法在项目中添加对它自己的 dll 的引用
-
为什么你的输出路径是
bin\Debug\net462而不是bin\Debug,我尝试在任务项目中使用task.dll但它第一次成功(我删除了bin和obj以确保天气晴朗)。我确信AfterTargets="Build"可以适用于这种情况。你能分享csproj中设置Project1.dll路径的内容吗?或者也许我分享一个成功的简单示例? -
我认为输出路径是这样的,只是因为我的目标框架是net462。我在 csproj 中看不到任何明确设置输出路径的内容,这正是 Visual Studio 放置 dll 的地方。一个有效的简单示例会有所帮助。
标签: visual-studio msbuild msbuild-task