如何修改 csproj PublishRunWebpack 以包含外部目录中的静态文件

Lie*_*ero 3 iis webdeploy asp.net-core angular asp-net-core-spa-services

我从 ASP.NET Core Web 应用程序 -> Angular SPA 开始,但我已将 Angular 应用程序移至 csproj 外部的单独存储库。

所以我的文件夹结构如下所示:

frontend
  dist

backend
  wwwroot
  backend.csproj
Run Code Online (Sandbox Code Playgroud)

现在我想修改 csproj 以便发布复制frontend/dist/**/*.*$(outputDirecory)/ClientApp/dist/**/*.*

我应该如何修改 PublishRunWebpack 目标来复制这些文件:

  <PropertyGroup>
    <SpaRoot>../Frontend</SpaRoot>
  </PropertyGroup>
  
  <Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
    <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod" />
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build:ssr -- --prod" Condition=" '$(BuildServerSideRenderer)' == 'true' " />

    <!-- Include the newly-built files in the publish output -->
    <ItemGroup>
      <DistFiles Include="$(SpaRoot)dist\**; $(SpaRoot)dist-server\**" />
      <!-- Include the newly-built files in the publish output -->
      <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">


        <!-- THIS NEEDS TO BE CHANGED (I guess) -->
        <RelativePath>%(DistFiles.Identity)</RelativePath>
        <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
      </ResolvedFileToPublish>
    </ItemGroup>
  </Target>
Run Code Online (Sandbox Code Playgroud)

Dar*_*rko 6

我遇到了同样的问题,几个小时后我找到了解决方案。我想这对你来说已经太晚了,但其他人可能会发现它有帮助。正如你所说,问题出在RelativePath. 默认值“%( DistFiles.Identity)”使用完整文件名并将其附加到根发布文件夹。解决方案是构建您自己的相对路径,就像我在下面的代码中所做的那样。

<Target Name="PublishRunWebpack"
          BeforeTargets="ComputeFilesToPublish">
    <!--User app-->
    <Exec WorkingDirectory="$(SpaRoot)"
          Command="npm install"
          Condition="  !Exists('$(SpaRoot)node_modules') " />
    <Exec WorkingDirectory="$(SpaRoot)"
          Command="npm run build -- --prod" />

    <ItemGroup>
      <ClientDistFiles Include="$(SpaRoot)dist/**/*.*"/>
      <ResolvedFileToPublish Include="@(ClientDistFiles->'%(FullPath)')"
                             Exclude="@(ResolvedFileToPublish)">
        <RelativePath>ClientApp\app\dist\%(RecursiveDir)%(Filename)%(Extension)</RelativePath>
        <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
        <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
      </ResolvedFileToPublish>
    </ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)