如何从dotnet watch run中排除某些文件类型?

8

希望能够实现以下设置:

我正在开发一个 Blazor 应用程序,并且使用官方的 css 隔离捆绑器。我使用 Less,并安装了 Less 转换器,在构建时创建所需的 css。

然而,通过 dotnet watch run 运行我的应用程序时,它经常陷入无限循环。

这可能是因为 dotnet watch run 看到了 *.razor.css 文件的更改,重新构建,循环不断地重复。

所以我的问题是:

如何配置我的 csproj(新的 Net Standard 格式),以从监视过程中排除 **\*.razor.css?如果它完全从我的 VS 解决方案中消失也可以。


你解决了这个问题吗? - Gongxi
4个回答

11

尝试了前面两种方法,但都不适用于我。由于我在构建过程中生成了一些文件,这可能是其他两个方法无法使用的原因。根据微软文档(https://learn.microsoft.com/en-us/aspnet/core/tutorials/dotnet-watch?view=aspnetcore-3.1)中所述,要从监视中删除项,也可以通过定义来设置。在我的情况下,使用此方法有效。

<ItemGroup>
    <Content Remove="wwwroot\dist\**" />
    <Content Include="wwwroot\dist\**" Watch="false" />
</ItemGroup>

我确实需要添加“Content Remove”选项,否则该项将被声明两次,从而导致构建失败。


2
谢谢!小贴士:这可以更简单地实现,只需使用<Content Update="wwwroot\dist\**" Watch="false" />即可。 - bart
1
对于那些遇到困难的人,另一个提示是在项目目录中运行 dotnet watch --list 命令,它会告诉你哪些文件将被监视,这样你就可以轻松测试这些更改了。 - René Sackers

1

我来这里后也遇到了同样的问题,最终解决方案如下:

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

对我来说工作得很好 :)


1

5
嘿,谢谢,我已经试过了 - 不过,我得到了以下错误:error MSB4232:位于 Target 元素之外的项必须具有以下操作之一:Include、Update 或 Remove。 - Sossenbinder

0

我有一个类似的设置,但我正在使用SASS。 我有一个自定义目标来执行命令npm run sass,因此文件是作为dotnet build过程的一部分生成的,这使得监视器在无限循环中重新触发构建。

在我的情况下,我找到的解决方案如下:

  1. 更改DefaultItemExcludes
<PropertyGroup>
   <DefaultItemExcludes>$(DefaultItemExcludes);Features/**/*.css</DefaultItemExcludes>
</PropertyGroup>

2. 确保将 CSS 编译目标调整为在 BeforeResGen 而不是之前使用的 Compile 运行:
  <Target Name="CompileScopedScss" BeforeTargets="BeforeResGen">
    <Exec Command="npm run sass -- %(ScopedScssFiles.FullPath) %(RootDir)%(Directory)%(FileName).css --no-source-map" />
  </Target>
  1. 引入CSS文件并设置Watch="False"
    <ItemGroup>
      <Content Include="Features/**/*.css" Watch="False" />
    </ItemGroup>

我在前一个目标之后执行此操作,但似乎它也可以在外部工作。

仅使用<Content Update... Watch="False" />在我的情况下不够。 <Watch Remove="..." />在我的情况下也无效,我认为这可能与文件在构建期间生成有关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接