MSBuild - 当我进行部署时如何强制“AfterBuild”目标?

2023-12-20

我有以下设置: ASP.Net MVC .Net 4.0 解决方案,其中有 5 个项目,以及几个解决方案配置(站点 1 阶段、站点 1 实时、站点 2 阶段, ETC)。原因很简单 - 我们将相同的代码库部署到具有不同配置设置的多个服务器。

为了管理这些配置,我使用 Troy Hunt 在他的文章中描述的方法你部署错了! TeamCity、Subversion 和 Web 部署第 1 部分:配置转换 http://www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity.html文章。用两个字来说——我没有网络配置在我的 SVN 存储库中,我有网络基础配置, 网站.Site1-Stage.Config等以及Xml转换项目中的任务构建后目标。在构建过程中,需要网络配置根据所选配置生成:

 <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
  <Target Name="AfterBuild">
    <TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" StackTrace="true" />
  </Target>

问题来了:当我像这样执行 MSBuild 时:

msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild

一切顺利,web.config 已正确生成站点1阶段配置。但是,如果我运行此命令:

msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild /P:DeployOnBuild=True

我收到以下错误:

“MySolution.sln”(重建目标)(1) -> “MySolution\MyWebProj.csproj” (重建目标) (3) -> (PreTransformWebConfig 目标) -> C:\Program 文件 (x86)\MSBuild\Microsoft\VisualStudio\v10.5\Web\Microsoft.Web.Publishing.targets(1399,5): 错误:将文件 Web.config 复制到 obj\Site1-Stage\TransformWebConfig\original\Web.config 失败。可以 找不到文件“Web.config”。 [MySolution\MyWebProj.csproj]

我尝试将“AfterBuild”目标显式添加到 MSBuild 命令行中:

msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild,AfterBuild /P:DeployOnBuild=True

但它导致了同样的错误。

为什么我需要这个:这是一个非常孤立的示例,实际上我正在尝试从 TeamCity CI 服务器设置自动发布。我认为,如果我在当前的发布步骤之前使用“Visual Studio (sln)”运行程序添加新的构建步骤,那会起作用,它将首先重建项目(并生成 web.config) - 然后发布。然而,我有很多发布步骤(现在大约 20 个),我想避免这种情况。我的理解是“发布”过程将构建作为其一部分,所以我想“重用”它。

问题是:我应该如何修改 MSBuild 命令行以强制发生配置转换?

谢谢。


也许使用“BeforeBuild”?

顺便说一句,csproj 中包含 web.config 吗?我相信大多数发布活动依赖于项目中的项目而不是文件夹中的项目。您可以将 web.config 包含在项目中,同时仍将其从源代码管理中排除。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MSBuild - 当我进行部署时如何强制“AfterBuild”目标? 的相关文章

随机推荐

  • Performance.now() 在 requestAnimationFrame 之前调用 - Performance.now() 具有更大的 t

    所以我有一个简单的功能 var start function lastFrame performance now requestAnimationFrame t gt interval t 还有我的间隔函数 只是为了测试目的 我堵塞了每个
  • jQuery 渐变插件?

    有没有什么好的jQuery渐变插件 我找到了一个 但它使用旧的 jQuery 当我使用最新版本时 所以它可能不适用于最新版本 我不知道你是否已经测试过这些插件 JQuery 渐变插件 http www ajaxupdates com jqu
  • 如何在 ASP.NET CORE 中为多个策略创建自定义授权属性

    我想授权一个操作控制器可以通过多个策略访问 e g Authorize Policies ManageAllCalculationPolicy Policies ManageAllPriceListPolicy public async T
  • Angular 基本 href 未显示在 URL 中

    我正在尝试将我的角度应用程序部署到生产环境 该环境在 url 中具有额外的位置步骤 例如www 生产服务器 com name of my app 附加到其后 当我通过 localhost 4200 上的 Angular cli 运行它并通过
  • python 求图交集

    有谁知道如何找到这两个图的交集 下图 energ ac price compvend and energ ac1 price compven1是一组x y values 请注意以下代码 它从数据库获取值 然后绘制两个图表 我只能手动获取路口
  • javascript中的运算符和事件

    update for i in window if i onhashchange console log i window i prints onchangechange undefined 在支持 onhashchange 事件的浏览器上
  • Eclipse GIT:当前分支未配置为拉取

    我正在和一个朋友一起开发一款基于图块的 RPG 他必须离开几个星期 我们决定是时候使用版本控制 git 了 我开始后悔了 几个小时后 我们设法让它工作到以下地步 我在 github 上创建了一个存储库 将他添加为协作者 我将eclipse中
  • ElasticSearch 0.90.2 在请求端口 9300 时出现 StreamCorruptedException

    我刚刚在 Windows XP 上解压了 elasticsearch 0 90 2 zip 并启动了 bin elasticsearch bat 我已将 JAVA HOME 设置为 C Program Files Java jre7 因为第
  • 占位符不适用于 Internet Explorer

    以下格式的文本框占位符不适用于 Internet Explorer 是否有办法在 Internet Explorer 中显示 TextBox 的占位符
  • 如何恢复 pip 升级

    我刚才执行了以下命令 pip install upgrade ipykernel 然而 我得到了 Requirement already satisfied ipykernel in anaconda3 lib python3 8 site
  • Pandas DataFrame 上的条件逻辑

    如何将条件逻辑应用于 Pandas DataFrame 请参阅下面所示的数据框 data desired output 0 1 False 1 2 False 2 3 True 3 4 True 我的原始数据显示在 数据 列中 所需的输出显
  • 如何在 Java 中执行 Windows 命令?

    我正在开发一个项目 它将为您提供 Windows 命令列表 当您选择一个时 它将执行该命令 但是 我不知道该怎么做 我打算在 Visual C 或 C 中完成它 但 C 类太复杂 我不想在 Visual C 中制作表单和垃圾 在控制台应用程
  • 在 GNU 汇编器中处理或记住 cmp 的向后参数的好方法是什么?

    以下是一些采用 Intel 语法的汇编代码 Jump to done if rsi gt rax cmp rsi rax jae done 这对我的大脑来说是有道理的 如果 rsi 高于或等于 rax 你就会跳 匹配中参数的顺序cmp操作说
  • 在 n 个皇后主要冲突搜索上表现不佳

    我正在实施 nqueens min conflict 搜索 如所述 Norvig S Peter J R and 2014 Artificial Intelligence A Modern Approach In Pearson Vol 5
  • gem install Rails 不安装rails

    当我尝试安装导轨时 root li44 48 gem install rails Successfully installed rails 3 2 1 1 gem installed Installing ri documentation
  • 从黑莓通知栏打开应用程序

    对于我的应用程序 我需要在通知栏中创建一个图标 我能够做到这一点 我的问题是我需要从通知栏打开此应用程序 当用户选择通知屏幕时 我的应用程序状态应该显示 当用户选择我的应用程序时 我的应用程序应该直接打开 看看下面的类 Applicatio
  • 在 Delphi XE2 中同时调试多个应用程序

    是否可以在一台机器上同时在 Delphi XE2 中调试多个应用程序 我有两个 实际上是三个 但中间的一个工作正常 相互发送消息 我希望能够同时调试这两个程序 这可能吗 如果是这样 怎么办 Thanks 是的 这是可能的 确保项目组中要调试
  • ASP.NET WebForm App_Theme 导致编译错误

    我有一个引用这样的主题的 WebForm TestTheme 只包含一个 Test skin 文件 其内容如下
  • 如何在 Crystal Report XI 中的运行时禁用参数提示?

    如何在 Crystal Report XI 运行时禁用子报表中的参数提示 我用的是Ms VS 2005 报告也包括在内 其他报表功能与水晶报表功能相同 其他报表在运行时不显示提示 不包括子报表 提示出现一份包含子报告 所以你可能有任何建议
  • MSBuild - 当我进行部署时如何强制“AfterBuild”目标?

    我有以下设置 ASP Net MVC Net 4 0 解决方案 其中有 5 个项目 以及几个解决方案配置 站点 1 阶段 站点 1 实时 站点 2 阶段 ETC 原因很简单 我们将相同的代码库部署到具有不同配置设置的多个服务器 为了管理这些