【问题标题】:.NET watch exclude files does not compile.NET 监视排除文件无法编译
【发布时间】:2021-04-22 19:27:42
【问题描述】:

我有一个 .NET blazor 项目,我想在其中使用 dotnet watch。 blazor 项目位于库中,而不是可执行文件中。我在可执行项目上运行 watch。在这个项目中,我尝试排除 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 中添加其他内容才能完成这项工作?

【问题讨论】:

    标签: .net visual-studio asp.net-core .net-core msbuild


    【解决方案1】:

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

    改为,你应该使用这个:

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

    然后然后使用dotnet watch build 命令。

    默认情况下,观看项不会监控任何js文件,css文件,只会观看.cs,.csproj,@987654330 @ 文件。

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

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

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

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

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

    赞:&lt;Watch Include="**\*.js;**\*.css" Exclude="wwwroot\**\*"&gt; 删除wwwroot 文件夹下的js和css文件。首次将文件扩展至Watch时,应同时根据需要删除相关文件。

    并且我认为你想排除一些js文件(不是默认的watch文件)和其他非默认的监控文件,在这种情况下,最好的方法是使用Remove。

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

    【讨论】:

    • 你说出来才有意义:)。我发现我不能使用空的包含,并且有点意识到这一点。
    • 根本原因似乎是我包含了 typescript msbuild 任务,它将所有 .ts 文件构建到 .js+.js.map 中,并且默认设置对每个构建都执行此操作,即使是未更改的文件,所以 dotnet-watch进入了编译循环。但这也意味着默认情况下会添加 .js 和 .js.map 文件来观看。所以我不确定你所说的默认文件类型是什么意思。 是 asp.net watch 命令使用的 msbuild 功能吗?
    • 有人(不是我的 csproj)正在添加 .js 和 .map 来观看,我需要摆脱它们。但是我通过修复 typescript msbuild 任务以在增量模式下运行来解决它,这似乎是“正常的”,因为它并不总是重建,只是更改了文件。
    【解决方案2】:

    在 MacOS 上,接受的答案:

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

    似乎不起作用;但是,我可以使用以下命令忽略 wwwroot 目录:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 2018-04-05
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多