Как исключить определенные типы файлов из dotnet watch run?

#.net-core #msbuild #csproj #dotnet-tool

#.net-core #msbuild #csproj #dotnet-инструмент

Вопрос:

Хотите запустить следующую настройку:

Я работаю над приложением Blazor и с официальным пакетом изоляции css. Однако я использую Less и установил Less transformer, который создает требуемый css при сборке.

Однако, запустив мое приложение через dotnet watch run , оно часто оказывается в бесконечном цикле.

Вероятно, причина этого в том, что dotnet watch run он видит изменения в *.razor.css файлах, перестраивает, и цикл просто повторяется снова и снова.

Итак, вот мой вопрос:

Как я могу настроить свой csproj (новый стандартный формат Net) для исключения ***.razor.css из процесса просмотра? Также было бы неплохо, если бы это просто исчезло из моего решения VS в целом.

Комментарии:

1. вы решили проблему?

Ответ №1:

Поиграл с обоими ответами выше, но ни один из них не сработал для меня. Я генерирую некоторые файлы во время сборки, и, возможно, именно поэтому остальные 2 у меня не работают. Согласно документам Microsoft, опубликованным выше (https://docs.microsoft.com/en-us/aspnet/core/tutorials/dotnet-watch?view=aspnetcore-3.1 ), чтобы удалить элемент из часов, вы также можете установить его с помощью определения. Это сработало для моего сценария.

 <ItemGroup>
    <Content Remove="wwwrootdist**" />
    <Content Include="wwwrootdist**" Watch="false" />
</ItemGroup>
 

Мне пришлось добавить удаление содержимого, так как в противном случае элемент объявляется дважды, и сборка завершится неудачно.

Комментарии:

1. Спасибо! Совет: это может быть проще достигнуто с <Content Update="wwwrootdist**" Watch="false" /> помощью .

Ответ №2:

Пожалуйста, отредактируйте ваш файл .csproj и добавьте к нему следующее

 <ItemGroup>  
    <Watch Exclude="***.razor.css" />
</ItemGroup>
 

Больше информации на

https://docs.microsoft.com/en-us/aspnet/core/tutorials/dotnet-watch?view=aspnetcore-3.1

Комментарии:

1. Привет, спасибо, я уже пробовал это — однако я получил следующую ошибку: ошибка MSB4232: элементы, которые находятся за пределами целевых элементов, должны иметь одну из следующих операций: включить, обновить или удалить.

Ответ №3:

У меня была такая же проблема после прихода сюда, в итоге:

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

У меня хорошо работает 🙂

Ответ №4:

У меня аналогичная настройка, за исключением того, что я использую SASS. У меня есть пользовательская цель для выполнения команды npm run sass , поэтому файлы генерируются как часть dotnet build процесса, что привело к повторному запуску сборки watch в бесконечном цикле.

В моем случае решение, которое я нашел, было следующим:

  1. Измените DefaultItemExcludes :
 <PropertyGroup>
   <DefaultItemExcludes>$(DefaultItemExcludes);Features/**/*.css</DefaultItemExcludes>
</PropertyGroup>
 
  1. Убедитесь, что цель компиляции 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="..." /> моем случае это тоже не сработало, и я считаю, что это может быть как-то связано с тем фактом, что файлы генерируются во время сборки.