У меня было приложение ASP.NET Core 1.1, которое было обновлено с Visual Studio 2015 с помощью project.json до Visual Studio 2017 со стандартом MsBuild csproj. Приложение развертывается в контейнере Docker в Linux, где находятся официальные образы от Microsoft. используются. BundlerMinifier отсутствовали. Но только в докере, а не в Visual Studio 2017 и без использования dotnet publish
в Windows 10.
Я узнал, что пакеты были сгенерированы. Но в папке wwwroot
решения, а не в выходной папке публикации (передается от --output
к dotnet publish
). Допустим, у меня есть /app
, где мое решение VS находится в док-контейнере. Теперь я запускаю dotnet publish --output /app/output
. Мои связанные файлы теперь находятся в /app/src/{projectName}/wwwroot
вместо /app/output/wwwroot
, где они мне нужны.
Я использую относительные пути в bundleconfig.json
следующим образом:
[
{
"minify": { "enabled": false },
"outputFileName": "wwwroot/site.min.css",
"inputFiles": [
"wwwroot/lib/my-input-file.css"
]
}
]
Чтобы создать пакет, у меня есть следующие сценарии публикации в моем файле csproj
.
<Target Name="PrepublishScript" BeforeTargets="PrepareForPublish">
<Exec Command="bower install" />
<Exec Command="dotnet bundle" />
</Target>
Я не очень хорошо знаком с MsBuild. Но, согласно некоторым исследованиям, следующие строки отвечают за копирование файлов в выходной каталог (например, wwwroot):
<ItemGroup>
<None Update="wwwroot\**\*;Views\**\*.cshtml;Areas\**\*.cshtml">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</None>
</ItemGroup>
Поскольку wwwroot уже включен здесь и копирование других файлов, таких как Views, работает, я подумал, что есть проблема с порядком выполнения. Что-то вроде MsBuild копирует файлы до того, как MsBuild их опубликует. Но это кажется невозможным по логике, так как это делается до цели PrepareForPublish
, которая соответствует Документы Microsoft — правильный путь.