【问题标题】:Renaming Web.config to run transforms breaks nuget package installation重命名 Web.config 以运行转换会中断 nuget 包安装
【发布时间】:2013-11-03 05:47:32
【问题描述】:

我有一个简单的场景,我有我的 Web.config,然后是一个 Web.Release.config,我想在部署到生产环境时使用它来转换 Web.config。仅当您在 VS 中发布时,转换才会自动运行,并且我没有使用 VS 进行部署,而是使用外部源代码控制和巡航控制来构建和部署。

我已经看到了几个解决这个问题的方法:

1) 使用基础 web.config 文件 (Web.base.config),以便在构建过程中通过修改项目文件来覆盖 Web.config 文件。 2)安装一个处理这个的扩展 3)在巡航控制中导入目标并基本上做与#1手动运行转换相同的事情,但这仍然需要一个与目标web.config分开的基本配置文件

所有这些的问题是我必须重命名我的 web.config(例如到 Web.base.config)或者我必须将 web 配置移动到不同的目录,以便一旦发生转换它就不会' t 覆盖我的基础(原始)web.config。

如果我这样做,那么当我安装/更新任何修改 web.config 的 nuget 包时,它会将更改添加到 Web.config,每次转换发生时,当确实需要应用更改时,这些更改将被覆盖到基础网络配置。

我到处搜索,没有人提到这是一个问题。我错过了什么吗?我希望有人可以提供不需要更改原始 Web.config 文件名/位置的解决方案。

【问题讨论】:

    标签: .net asp.net-mvc-4 deployment msbuild nuget


    【解决方案1】:

    这是因为转换任务本身锁定了 web.config。

    我相信最简单的解决方案是在转换之前使用复制任务并将您的配置复制到 web.config.copy。然后将您的 web.config.copy 转换为 web.config.transformed,然后将其复制回 web.config。

    复制任务可以覆盖只读,因此您应该不会对源代码控制文件有任何问题

    【讨论】:

    • 在这种情况下 web.config.transformed 的意义何在?我不能将 web.config.copy 转换为 web.config 吗?
    • 另外,这对源代码控制意味着什么?如果我使用巡航控制构建,它会删除最新的源,将 web.config 复制到 web.copy.config,然后将副本转换为 web.config。那太棒了。现在,如果我再次运行构建而不对源进行任何更改,它不会复制已经转换的 web.config 以重新开始该过程吗?所以基本上它将转换第一次已经转换的 web.config。
    • 1.你可以试试。我们正在使用 TFS,并且当 Build Agent 获得最新的源代码时 - 工作区中的所有文件都是只读的。所以我们使用中间文件 .transformed 来捕获任务输出,然后我们使用 OverwriteReadOnlyFiles=true 的复制任务来避免任何只读问题。
    • 2.我希望每次都从存储库中获得一份干净的副本,无论是新版本还是重复版本。我相信多次构建相同的源代码(不是来自 vcs 的“新副本”)是一种不好的做法,它导致的问题多于解决的问题。但是,一般来说,您的问题的答案是“我想是的,它将使用您在光盘上的文件”。在您的特定情况下-我不知道您的 CC 是如何设置的,也许有一种方法可以在构建之前获取新副本,并且 CC 已设置为这样做:)。
    猜你喜欢
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多