#.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 в бесконечном цикле.
В моем случае решение, которое я нашел, было следующим:
- Измените
DefaultItemExcludes
:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);Features/**/*.css</DefaultItemExcludes>
</PropertyGroup>
- Убедитесь, что цель компиляции css должна выполняться раньше
BeforeResGen
вместоCompile
(которую я использовал раньше):
<Target Name="CompileScopedScss" BeforeTargets="BeforeResGen">
<Exec Command="npm run sass -- %(ScopedScssFiles.FullPath) %(RootDir)%(Directory)%(FileName).css --no-source-map" />
</Target>
- Включите файл css и установите
Watch="False"
:
<ItemGroup>
<Content Include="Features/**/*.css" Watch="False" />
</ItemGroup>
Я делаю это в цели после предыдущей цели, но, похоже, это работает и вне ее.
<Content Update... Watch="False" />
В моем случае просто использовать было недостаточно. В <Watch Remove="..." />
моем случае это тоже не сработало, и я считаю, что это может быть как-то связано с тем фактом, что файлы генерируются во время сборки.