Опубликовать ClientApp\dist под другим именем

У меня есть приложение .NET Core (Razor Pages) и другое приложение VueJS внутри папки ClientApp. Публикация скомпилированного SPA осуществляется с помощью известного сниппета, который можно найти в Интернете:

  <Target Name="PublishClientApp" AfterTargets="ComputeFilesToPublish">
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build" />
    <ItemGroup>
      <DistFiles Include="$(SpaRoot)\dist\**" />
      <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
        <RelativePath>%(DistFiles.Identity)</RelativePath>
        <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
      </ResolvedFileToPublish>
    </ItemGroup>
  </Target>

Однако SPA публикуется в папке ClientApp/dist (отражая структуру решения). Я хотел бы опубликовать его в приложении/папке, но не знаю, как изменить эту задачу msbuild. Я предполагаю, что в этом фрагменте что-то есть - @(DistFiles-›'%(FullPath)'), но попытка его настроить не дала никакого результата.

Solution Structure    Published Folder      Desired Structure
\                     \                     \
 - ClientApp           - ClientApp           - app ( <- dist folder content here )
   - dist                - dist

person Georgi    schedule 26.04.2021    source источник


Ответы (1)


Вы можете изменить метаданные сгенерированных ResolvedFileToPublish элементов на другую структуру:

<RelativePath>app\%(DistFiles.RecursiveDir)%(DistFiles.Filename)%(DistFiles.Extension)</RelativePath>

Обратите внимание, что %(DistFiles.RecursiveDir) разрешается в компоненты каталога, совпадающие с подстановочным знаком ** в определении <DistFiles>.

person Martin Ullrich    schedule 27.04.2021