.NET watch 排除文件不编译

.NET watch exclude files does not compile

我有一个 .NET Blazor 项目,我想在其中使用 dotnet watch。 Blazor 项目在库中,而不是可执行文件中。我 运行 观看可执行项目。在这个项目中,我尝试将 wwwroot 中的所有文件排除在触发重建之外。根据错误消息需要包含,所以我添加了一个空的。这是 msbuild 部分。

  <ItemGroup>
    <Watch Include="" Exclude="wwwroot\**\*" />
  </ItemGroup>

并且在构建项目时出现此错误,好像不支持排除。但是文档说明这是从 dotnet watch.

中排除文件的方法
> dotnet build
Microsoft (R) Build Engine version 16.8.0+126527ff1 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.

  Determining projects to restore...
<proj>.csproj(51,23): error MSB4066: The attribute "Exclude" in element <Watch> is unrecognized.

Build FAILED.

.NET 5.0 在 Watch 方面有什么变化吗?我是否需要在 csproj 中添加其他内容才能完成这项工作?

Watch 包含项不能为空,这是一个 xml 语法错误。

而不是,你应该使用这个:

<ItemGroup>
    <Watch Remove="wwwroot\**\*" />
 </ItemGroup>

然后使用dotnet watch build命令。

默认情况下Watch 项目不会监控任何 js 文件,css 文件并将仅观看 .cs.csproj.resx 个文件。

注意:如果要排除.cs.resx文件,不能使用Remove和您应该为文件添加 Watch="false" 以排除它们。检查 this tip.

如果你根据需要扩展了监视范围,基本上,添加你的其他自定义文件,你应该注意以下几点:

============================================= ==================

其实,因为include不能为空,exclude应该和include同时工作。如果你之前已经包含了文件,然后使用includeexclude删除一些文件,这是错误的,因为你已经包含了一些文件两次。 exclude节点作用于当前include节点。如果上面的 xml 节点仍然有相同的 item include,则该文件始终存在于该项目下。

Either,当你对watch include使用大范围文件时,排除一些不需要同时监控的文件。

喜欢:<Watch Include="**\*.js;**\*.css" Exclude="wwwroot\**\*"> 删除 wwwroot 文件夹下的 js 和 css 文件。当您第一次将文件扩展到Watch时,您应该同时根据需要删除相关文件。

And 我想你想排除一些js文件(不是默认的监视文件)和其他非默认监控文件,在这种情况下,最好的方法是使用移除.

换句话说,RemoveInclude 适用于其他扩展的非默认文件,而 Watch="false" 适用于默认监视文件。

在 MacOS 上,接受的答案:

 <ItemGroup>
    <Watch Remove="wwwroot\**\*" />
 </ItemGroup>

好像不行;但是,我能够使用以下命令忽略 wwwroot 目录:

  <ItemGroup>
    <Content Update="wwwroot/**/*" Watch="false" />
  </ItemGroup>

来源:Opt-out of files to be watched - Microsoft