当我创建发布配置文件时,我可以选择我希望发布用于此配置文件的配置。这些选项类似于 Debug、Release 或任何自定义的选项,例如 Staging。问题是,如果我选择 Release 或 Debug 以外的任何配置,比如 Staging,Visual Studio 将完全忽略我的选择并使用 Web.Release.config 进行转换和构建。我做错了什么还是设计使然?似乎 Publish 仅将 Release 和 Debug 识别为可接受的配置。对这个问题有什么想法吗?
我正在使用 Visual Studio 2012 RTM。
更新 1 :: "NightlyLive - Any CPU" 配置选择:
这里我选择我自己的自定义配置“NightlyLive”:
这是我发布时发生的情况:
6>------ Build started: Project: UI.Next, Configuration: Release Any CPU ------
7>------ Publish started: Project: UI.Next, Configuration: Release Any CPU ------
7>Transformed Web.config using [...]\UI.Next\Web.Release.config into obj\Release\TransformWebConfig\transformed\Web.config.
如您所见,它使用 Release Any CPU(而不是 NightlyLive - Any CPU)构建项目,并且使用 Web.Release.config(而不是 Web.NightlyLive.config)转换 Web.config。
更新 2 :: 配置文件名称重命名为“NightlyLive”:
在这里,我将配置文件名称从“test”重命名为“NightlyLive”。
这是控制台输出:
6>------ Build started: Project: UI.Next, Configuration: Release Any CPU ------
7>------ Publish started: Project: UI.Next, Configuration: Release Any CPU ------
7>Transformed Web.config using [...]\UI.Next\Web.Release.config into obj\Release\TransformWebConfig\transformed\Web.config.
7>[...]\UI.Next\Web.NightlyLive.config(23,18): Warning : Argument 'debug' did not match any attributes
7>[...]\UI.Next\obj\Release\TransformWebConfig\transformed\Web.config(78,6): Warning : No attributes found to remove
7>Transformed obj\Release\TransformWebConfig\transformed\Web.config using [...]\UI.Next\\Web.NightlyLive.config into obj\Release\ProfileTransformWebConfig\transformed\Web.config.
所以在这里,它仍然是使用 Release Any CPU 构建的。
但是对于 Web.config,它首先使用 Web.Release.config 进行转换,然后使用 Web.NightlyLive.config 在前一个转换的基础上进行第二次转换。
我认为双重转变是有意为之的,而且是有道理的。但是,您必须将配置文件名称重命名为配置名称以强制使用您的自定义转换文件,这一事实看起来并不正确。
更新 3 :: 添加了 TestSolution
您可以从这里下载精简的解决方案。
首先,我创建了一个全新的 vs2012 解决方案,一切正常。所以我决定剥离我当前的解决方案并作为测试用例上传。
请注意,我的解决方案最初是我在 vs2012 中打开的 vs2010 解决方案,vs2012 对解决方案进行了必要的修改。
更新 4 :: 判决
我想我的解决方案配置都搞砸了。所以基本上为了解决这个问题,我删除了所有自定义的解决方案和项目配置,并与 web.config 转换文件一起再次创建它们。
问题解决了。