ASP.NET Core和SPA-客户端不在服务器文件夹之外时不会发布客户端文件

问题描述

我有一个项目,该项目具有单独的客户端和服务器文件夹,我的目标是在服务器的发布过程中包括客户端文件文件夹结构如下:

|- server
|  |- src
|     |- MyProject
|        |- MyProject.csproj
|- client
   |- src
      |- dist

使用认的SPA模板,该模板定义SpaRoot(在我的情况下为../../../client/src/)和以下项目组定义

<ItemGroup>
    <distFiles Include="$(SpaRoot)dist\**; $(SpaRoot)dist-server\**" />
    <distFiles Include="$(SpaRoot)node_modules\**" Condition="'$(BuildServerSideRenderer)' == 'true'" />
    <ResolvedFiletoPublish Include="@(distFiles->'%(FullPath)')" Exclude="@(ResolvedFiletoPublish)">
        <RelativePath>%(distFiles.Identity)</RelativePath>
        <copyToPublishDirectory>PreserveNewest</copyToPublishDirectory>
        <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
    </ResolvedFiletoPublish>
</ItemGroup>

从日志中我可以看到,这导致将文件复制到其他地方copying file from "C:\MyProject\client\src\dist\img\ic_mail.svg" to "C:\MyProject\server\src\MyProject\obj\Release\client\src\dist\img\ic_mail.svg".,而目标路径应为C:\MyProject\server\src\MyProject\obj\Release\netcoreapp3.1\PubTmp\Out\appsettings.Development.json。我假设这是由不同的父目录引起的,因为公共父目录在层次结构中位于3层之上,并且文件也被复制到比原先高3层的目录中。

我尝试在SpaRoot前面加上$(ProjectDir),但这没有帮助。我的目标是将文件dist文件夹复制到位于发布文件夹根目录的wwwroot。我试图调整ResolvedFiletoPublish,但无法检索项目的相对路径(相对于dist文件夹)。

编辑:一个基于csproj的解决方法是将文件手动复制到wwwroot挂钩中的BeforeTargets。这会产生无法预料的问题吗? (主要是<ClientdistFile/>

<ItemGroup>
    <ClientdistFiles Include="$(SpaRoot)dist/**/*.*"/>
</ItemGroup>

<Target Name="PublishRunWebpack" BeforeTargets="ComputeFilesToPublish">
    <!-- As part of publishing,ensure the JS resources are freshly built in production mode -->
    <Exec WorkingDirectory="$(SpaRoot)" Command="yarn install" />
    <Exec WorkingDirectory="$(SpaRoot)" Command="yarn build:$(TargetEnvironment)" />

    <copy
        SourceFiles="@(ClientdistFiles)"
        DestinationFiles="@(ClientdistFiles->'wwwroot\%(RecursiveDir)%(Filename)%(Extension)')"
    />
</Target>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)