无法将 reactjs 和 .net 4.8 后端部署到 iis - dist 文件夹丢失

Posted

技术标签:

【中文标题】无法将 reactjs 和 .net 4.8 后端部署到 iis - dist 文件夹丢失【英文标题】:Having trouble deploying reactjs and .net 4.8 backend to iis - dist folder missing 【发布时间】:2020-04-29 13:42:22 【问题描述】:

所以我尝试使用 .net 4.8 后端和 reactjs 作为前端从 Azure Devops 部署到服务器上的 IIS。工件最终在那里,但它缺少一些关键组件。

我遇到的问题是试图让“dist”文件夹结束反应文件夹:“/ClientApp”。路径是“[projectroot]/ClientApp/dist”,但它最终无处可去。我尝试了多种不同的路径组合。我还尝试使用两个构建步骤和两个工件,但这也不起作用。我将发布一系列我的设置图片,希望这能帮助你为我指明正确的方向..

这是在“ClientApp”中带有 react 应用程序的项目

dist 文件夹

网络包

npm 构建步骤

解决方案构建步骤

复制文件步骤(从这个帖子enter link description here得到这个)

神器步骤

发布步骤(之前的任务包含身份验证等)

这是从构建中删除的工件(请注意,工件与压缩在 drop 中的解决方案“拆分”(正确)但 npm 构建(或复制文件)在其自己的文件结构中。这很可能是出了什么问题。

这是服务器上的根文件夹,看起来不错

ClientApp 文件夹中没有“dist”文件夹...

【问题讨论】:

【参考方案1】:

问题是 IIS Web 应用程序部署任务从包 AFA.WEB.zip 部署,并且反应工件应复制到位于包 AFA.WEB.zip 中的反应文件夹 /ClientApp。但是,react 工件被复制到位于包 AFA.WEB.zip 之外的错误位置,请参见下面的屏幕截图。

其中一种解决方法是将 Visual Studio Build 任务的 MSbuild Arguments 更改为 /t:publish /p:outputpath=$(Build.ArtifactStagingDirectory) 而不是 /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true ...

这样后端构建工件将被发布到文件夹 $(Build.ArtifactStagingDirectory)\publish 而不是压缩。然后在 Copy files 任务中,您可以将 react 工件复制到 Target 文件夹 $(Build.ArtifactStagingDirectory)\publish\ClientApp\dist

然后在 IIS Web 应用部署任务 中,将 Package or Folder 设置为文件夹 $(System.DefaultWorkinDirectory)/..-Master-CI/drop/publish

你也可以参考我对this thread的回复。

更新

如果上面的 Msbuild 参数没有按预期生成工件。请尝试使用 /p:SkipInvalidConfigurations=true /p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:publishUrl="$(build.artifactstagingdirectory)\\" /p:DeployDefaultTarget=WebPublish 作为 Msbuild 参数。此 msbuild 参数会将构建工件输出到文件夹 $(build.artifactstagingdirectory)\\ 解压缩。

主要目标是让 Visual Studio 构建任务生成解压缩的构建工件文件。

在 Copy files 任务中,您可以将 react 工件复制到 Target 文件夹 $(Build.ArtifactStagingDirectory)\ClientApp\dist

IIS Web 应用部署任务中,将Package or Folder设置为文件夹$(System.DefaultWorkinDirectory)/..-Master-CI/drop/

【讨论】:

好的,我尝试改变所有这些,但现在工件是相同的,只有一个 'publish' 文件夹,其中包含 'ClientApp/dist' 和二进制文件,而不仅仅是 'ClientApp /dist' 包含所有二进制文件。当我检查服务器时,那里只有'ClientApp'文件夹,里面有dist文件夹。没有别的,没有二进制文件,没有 webconfigs,什么都没有。 也许我必须有两个版本?一个用于“$(System.DefaultWorkingDirectory)/Phobos-Master-CI/drop/”,一个用于“$(System.DefaultWorkingDirectory)/Phobos-Master-CI/drop/publish”? 在将 msbuild 参数更改为 /t:publish /p:outputpath=$(Build.ArtifactStagingDirectory) 后,您能否检查 vsbuild 任务日志以查看构建工件是否生成到 $(Build.ArtifactStagingDirectory)\publish 我不确定在哪里可以看到这个。我检查了最新版本的日志(您可以在这些步骤中看到所有日志),但我找不到任何关于输出路径的提及。你能指出我正确的方向吗? 嗨 @swedish_junior_dev 如果上面的 msbuild 不起作用。请尝试使用这个 msbuild 参数/p:SkipInvalidConfigurations=true /p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:publishUrl="$(build.artifactstagingdirectory)\\" /p:DeployDefaultTarget=WebPublish

以上是关于无法将 reactjs 和 .net 4.8 后端部署到 iis - dist 文件夹丢失的主要内容,如果未能解决你的问题,请参考以下文章

ReactJS中如何将图片从后端发送到前端

ReactJS 和 .NET Core API 中的 windows 授权

Nodejs:无法同时运行expressjs和reactjs

无法在 ReactJS 后端项目上将项目添加到 SQL 数据库

为啥我无法卸载 .NET Framework 4.8?

@firebase/firestore:Firestore (8.6.2):无法访问 Cloud Firestore 后端(React Js)