定义要通过dotnet watch运行的命令

时间:2018-08-13 14:43:56

标签: c# reactjs .net-core jsx csproj

我有一个dotnet核心项目,该项目具有使用中微子来管理预设和配置的react前端。构建过程运行'yarn build'来用Babel构建jsx文件,然后编译dotnet代码:

  <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="yarn build" />
  </Target>

我已使用以下命令设置了我的csproj文件以查看更改:

  <ItemGroup>
    <Watch Include="**\*.cs" />
    <Watch Include="**\*.jsx" Exclude="node_modules\**\*;build\*" />
  </ItemGroup>

当我使用'dotnet watch run'运行项目时,一切正常,但是jsx文件和dotnet项目的构建过程的总长度可能会花费大量时间。

是否有一种配置方法,以便仅对jsx文件中的更改运行“ yarn build”,并且仅在cs文件更改时重新构建dotnet部分?

2 个答案:

答案 0 :(得分:1)

您可以向dotnet而不是run提供自定义参数来执行自定义msbuild目标:

dotnet watch msbuild /t:YarnBuild

对于项目文件中的目标,例如:

<Target Name="YarnBuild" BeforeTargets="BeforeBuild">
  <Exec Command="yarn build" />
</Target>  
<ItemGroup>
  <Watch Include="**\*.jsx" Exclude="node_modules\**\*;build\*" />
</ItemGroup>

答案 1 :(得分:0)

我知道这有点晚了,但我想加入并在 Martin Ullrich 的回答中添加更多内容。我建议设置两个单独的后台任务来观看两种不同类型的编译。

在 bash 中:

dotnet watch run & # watch C# changes
dotnet watch msbuild /t:YarnBuild & # watch javascript changes

注意 &,它在后台执行前面的命令。

要将后台进程带到前台,首先使用 jobs 命令查看后台进程。从那里,您可以使用 fg <processID> 将其置于前台。 CTRL+Z 将其送回后台。

在 powershell 中:

Start-Job { dotnet watch run }; # watch C# changes
Start-Job { dotnet watch /t:YarnBuild }; # watch javascript changes

我不知道有什么方法可以像在 bash 中那样将 powershell 作业带到前台,但是您可以使用 Receive-Job 读取输出。首先,使用 Get-Job 获取所有正在运行的作业及其 ID 的列表。从那里,使用 Receive-Job <processID> 查看您的作业的输出。

我发现这种方法最符合人体工程学,因为它让我省去了不得不想出一个单一命令来做我想做的一切的麻烦。使用后台作业可能会导致更多的按键操作,但工作流程更易于遵循。 :)

有关 bash 作业的更多信息:https://www.gnu.org/software/bash/manual/html_node/Job-Control-Basics.html

有关 powershell 作业的更多信息: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_jobs?view=powershell-7.1