msbuild - ASP.NET Core & SPA - 当客户端位于服务器文件夹之外时,客户端文件未发布
问题描述
我有一个项目,它有单独的客户端和服务器文件夹,我的目标是在服务器的发布过程中包含客户端文件。文件夹结构如下所示
|- server
| |- src
| |- MyProject
| |- MyProject.csproj
|- client
|- src
|- dist
SpaRoot
使用在我的情况下定义的默认 SPA 模板../../../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
with 加上前缀$(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>
解决方案
推荐阅读
- c# - 如何使用 InMemory 测试 Entity Framework Core 数据库,并为大量行提供插入功能
- c# - 对于 Snowflake .NET 连接器,我可以在原始(Pascal)外壳中获取列名吗?
- amazon-web-services - [XX000][500310] [Amazon](500310) 无效操作:解析的清单不是有效的 JSON 对象
- c - C中的字符串如何分配指向char的指针?
- python - 是否可以使用 camelot 仅从 pdf 中提取表格?它应该只检测表格而不是文本
- r - R igraph:在 igraph 中寻找最短路径,为其添加权重并寻找替代路径
- ios - 登录后,实现 Auth0 的 Django 应用程序不会在 iOS 设备上呈现
- javascript - 如何在双击时关闭 Bootstrap Datepicker?
- azure-cosmosdb - Azure Cosmos DB Emulator 未运行除 SQL API 之外的任何 API
- mysql - 如何将 Oracle 存储过程转换为 MySQL