【问题标题】:Can I package a website with a publish profile using msbuild and skip the web.config transforms?我可以使用 msbuild 打包带有发布配置文件的网站并跳过 web.config 转换吗?
【发布时间】:2013-07-30 21:07:40
【问题描述】:

我有一个包含三个发布配置文件的网站解决方案,我们用它来转换每个目标环境的连接字符串:

  • 测试 - 本地主机连接,无转换,默认检查
  • 暂存 - 虚拟机环境
  • 生产 - 真正的交易

我们还有一些应用设置需要针对每个环境进行转换。因此,我们使用了常规的、基于构建配置的转换。

  • 调试 - 暂存转换设置
  • 发布 - 用于生产的转换设置

当我们尝试打包测试配置文件时,这让我们陷入困境。我们将其打包,以便测试人员可以从构建工件而不是源代码在他们的系统上进行部署。但是,测试包选择了调试应用设置转换。

有没有办法告诉 msbuild 使用测试配置文件打包网站,但跳过配置转换? 或者我应该围绕环境重新构建构建配置? (也就是说,不理会 Debug 和 Release,而是为每个环境创建一个构建配置)

命令行构建语句

我正在调试解决方案配置下构建我的测试配置,它肯定会选择转换后的Web.Debug.config 文件。没有 Web.Test.config 文件,因为 Test 是“发布配置文件”而不是构建配置。

cmd> msbuild websites.sln /t:Build /p:Configuration=Debug;Platform="Any CPU";DeployOnBuild=true;DeployTarget=Package;PublishProfile=Test;VisualStudioVersion=11.0

也许我在这里做错了什么。我确实觉得配置/平台是多余的,因为我也在“发布配置文件”对话框中提供了这些。 Visual Studio 版本让我感到惊讶,但它是生成 zip 包所必需的。

【问题讨论】:

    标签: asp.net msbuild web.config-transform


    【解决方案1】:

    我会为每个环境构建一个配置以保持一致性。但是,如果没有为特定环境提供配置(即,web.Test.config),您发布的构建将只使用原始 web.config 文件而不是转换。

    【讨论】:

    • 我肯定看到测试发布配置文件使用了调试构建配置和 Web.Debug.config 文件。它可能是我的命令行构建语句中的内容,我可以提供参考。
    • 我尝试了 1:1 发布配置文件来构建配置。这是很多工作,但似乎在设置后提供的摩擦最小。幸运的是,我只需要改造几个网站。
    • 谢谢,但这些描述的是一次性的手动修复,您最终会回滚或永远不会签入。在我的情况下,我想要一个环境的调试版本,但没有指定变换。
    • 好吧,如果您注意到项目文件中的<TransformWebConfigEnabled>False</TransformWebConfigEnabled> 可以根据配置或平台值的条件属性进行设置。你试过吗?
    • 暂存配置文件在 Debug 下构建并且需要转换。因此,我不能根据配置将其全部关闭。它是发布配置文件+配置的组合。我认为无论是我的方式还是 MSFT 的方式都不灵活......似乎唯一有意义的是 1:1 发布配置文件以构建配置。
    【解决方案2】:

    如果您从命令行构建网站 sln,您可以提供参数 OutputPath: 例如

    msbuild websites.sln /p:OutputPath=c:\test
    

    运行后打开 c:\test,您将找到一个文件夹 _PublishedWebsites,其中包含所有已编译的站点。无需发布配置文件。 啊,但是如何在不使用 msdeloy 和发布配置文件的情况下配置它? 您可以创建自己的 XDT,例如用于调试和发布的 XDT,web.config.staging 添加这些文件并设置 构建动作:内容 复制到输出:始终复制

    您可以随时使用CCT 等xdt 转换工具来转换您的网络配置。 (即在 Visual Studio 之外 - 部署甚至重新部署) 顺便说一句,CTT 很棒。此外,为了更进一步,您应该制作 XDT 文件模板并为每个 env uat、prod 等设置属性。但那是另一个游戏。

    【讨论】:

    • 我很欣赏这个选项。而且我确实喜欢控制我的源代码和构建。但是,微软确实很难在他们的工具之外生活。这似乎比维护 1:1 发布配置文件和构建配置更复杂。
    【解决方案3】:

    最后,我按照 Mitch 开始的建议做了 - 在解决方案/项目配置、发布配置文件和环境之间保持 1:1 的关系。如果你给它想要的一切,工具会更好地工作。

    所以,这应该是一个明智的选择

    | Environment | Solution       | Publish  | Assembly       |
    |             | Configuration  | Profile  | Configuration  |
    ============================================================
    | Test        | Test           | Test     | Debug          |
    | Staging     | Staging        | Staging  | Debug          |
    | Prod        | Prod           | Prod     | Release        |
    

    我可以在发布配置文件中指定程序集构建配置(以便生产环境获得发布优化)。而且,配置/平台属性会从命令行中消失。

    cmd> msbuild my.sln /t:Build /p:DeployOnBuild=true;DeployTarget=Package;PublishProfile=Staging;VisualStudioVersion=11.0
    

    一切都在一个整洁的包文件夹中结束

    .\websites\somewebsite\obj\Staging\Package
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      相关资源
      最近更新 更多