问题描述
我有一个项目,该项目具有单独的客户端和服务器文件夹,我的目标是在服务器的发布过程中包括客户端文件。文件夹结构如下:
|- 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 (将#修改为@)