【问题标题】:Publish ASP.NET without deploying在不部署的情况下发布 ASP.NET
【发布时间】:2017-01-25 05:17:00
【问题描述】:

我有一个解决方案,其中包含一个我想使用 VSTS 构建的 ASP.NET 网站。目前我只是使用 MSBuild 构建它,但是当我将文件复制过来时出现错误 - 主要是我的 Application_Start 没有触发。

经过一番挖掘,似乎可能是因为我的 Web.Config 尚未“编译”。我在网上阅读的所有内容都说那是因为我需要“发布”我的网站。问题是我只想构建这个东西并让我的发布过程负责部署。

如何生成已发布的输出(或触发 App_start 问题)而无需将其部署到某处。

我正在使用 Visual Studio Team Services 进行构建和发布。

【问题讨论】:

  • 构建一个 web-deploy 包怎么样?
  • 你可以将它发布到你的本地文件系统,它应该会给你输出,然后需要复制到某个地方的网络服务器。
  • @Hackerman 老实说不确定那是什么,我以前从未“发布”过 ASP.NET 项目。从构建中复制文件在过去一直有效;/
  • @David 问题在于我使用的是托管构建服务器代理,因此路径都是相对的,而不是“已知的”。从我所见,您必须在 publish.pubxml 中指定一个文件夹路径 - 这可以是相对的吗?
  • 我们使用 VS 发布到服务器上的一个临时文件夹(通常称为“暂存”文件夹)。 VS 发布过程编译所有内容,甚至允许您自定义 web.config 文件以调整连接字符串和路径等。非常便利!上传并测试登台网站后,登录到服务器并从登台文件夹复制到实时网站的文件夹。这种方法对我们很有效。

标签: c# asp.net msbuild azure-pipelines


【解决方案1】:

我的经验是使用 TFS,我相信它在功能上与 VSTS 相同。

构建代理有一个工作目录,每个构建包含多个文件夹:

  • a - Build.ArtifactStagingDirectory - 这是构建工件所在的位置。 “Copy and Publish Build Artifacts”构建步骤会自动复制到这个目录
  • b - Build.BinariesDirectory - 这是构建二进制文件应该去的地方
  • s - Build.SourcesDirectory - 这是源代码被下拉的地方
  • TestResults - Common.TestResultsDirectory - 存储测试结果的位置。

您可以告诉 MSBuild 将输出复制到构建二进制文件目录。我使用的参数创建了一个文件系统可部署(XCopy/Robocopy 可部署)输出和一个Web Deploy 输出。我更喜欢文件系统可部署的输出。

创建一个Visual Studio Build 步骤,并将它们用作您的 MSBuild 参数。请注意,其中一些可能不太适合您,您应该尝试一下。

/p:SkipInvalidConfigurations=true /p:DeployOnbuild=True /p:GenerateProjectSpecificOutputFolder=true /p:GenerateBuildInfoConfigFile=false /p:OutDir=$(Build.BinariesDirectory) /p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=false

这会将结果放在Build.BinariesDirectory\<project name>\_PublishedWebsites。从那里,创建一个 Copy and Publish Build Artifacts 步骤,使用 $(Build.BinariesDirectory)\<project name>\_PublishedWebsites\<project name> 的复制根目录进行文件系统部署。

然后对于发布,只需将该构建工件的内容复制到站点目录的根目录(可能每次都清除任何已经存在的内容)。我们使用 Windows Machine File Copy 步骤和 Clean Target 选项。

我认为没有理由为 Web Deploy 烦恼。文件系统部署好像是good enough for Stack Overflow

【讨论】:

  • 感谢解答,不知道a/b/s文件夹是什么意思!
  • 如何让它只发布一个项目?我的解决方案中有多个,但目前我只想发布一个
  • @Chris 我认为您需要切换到 MSBuild 构建步骤,并传递项目名称。我不介意它构建/发布所有项目,因为我通过 Copy and Publish Build Artifacts 步骤控制最终在工件中的项目。
  • 我快到了我只是无法将已发布的文件夹放入构建工件中。我使用$(Build.BinariesDirectory)/** 作为复制内容的参数,它映射到D:\a\1\b/**。检查我的构建输出,它似乎对该目录做一些事情 lol D:\a\1\b\[project]\_PublishedWebsites\[project]_Package
  • 不要使用**。使用我在回答中描述的路径。无需通配符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多