.net visual studio发布选择了错误的web.config转换

.net visual studio发布选择了错误的web.config转换,.net,visual-studio-2012,visual-studio-2013,transform,msdeploy,.net,Visual Studio 2012,Visual Studio 2013,Transform,Msdeploy,根据我读到的内容,只要您有一个与发布配置文件名称匹配的转换,就应该应用它,但我不是这样 发布配置文件 PublisProfiles dev.pubxml local.pubxml 转变 Web.Config Web.Debug.config Web.local.config Web.Release.config 当我使用localconfig发布时,我看到: Transformed Web.config using C:\...\Web.Re

根据我读到的内容,只要您有一个与发布配置文件名称匹配的转换,就应该应用它,但我不是这样

发布配置文件

PublisProfiles
    dev.pubxml
    local.pubxml
转变

 Web.Config
     Web.Debug.config
     Web.local.config
     Web.Release.config
当我使用localconfig发布时,我看到:

Transformed Web.config using  C:\...\Web.Release.config into obj\Release\TransformWebConfig\transformed\Web.config.
所以它使用的是Release.config。。我打开了local.pubxml并尝试更改它

<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
发布
致:

本地
但是它使用Web.Debug.config转换


dev、release和local转换除了一些转换的属性之外是相同的。

发布管道应该同时使用配置文件的转换和构建配置转换


这样做的逻辑是,您的概要文件转换可能具有特定于目标的设置(例如,在生产与暂存中使用哪些连接字符串),但您的生成配置具有特定于生成的设置(例如,调试具有与调试相关的设置,但发行版将其关闭)。允许您混合和匹配这些选项可以提供更大的灵活性(需要在启用调试设置的情况下发布到暂存?只需在暂存配置文件中使用调试生成配置)。web.YourProfile.config中的设置将始终否决之前的任何转换。

似乎是一个bug,因为我最终通过以下方式使其工作:

  • 删除Web.Debug.config

  • 本地发布(我的Web.local.config现在正在应用)

  • 右键单击Web.Config“添加配置转换”以返回Web.Debug.Config

  • 确认转换仍然有效


  • 我的问题与平台配置有关:

    在Configuration Manager窗口中,您可以选择配置名称(“活动解决方案配置”组合框)和目标平台(“活动解决方案平台”组合框)。我正确地为每个项目设置了我的新配置(“MyStagingConfig”),但忘记了平台——所以我在“混合平台”中配置了所有配置


    当我使用“MyStagingConfig-anycpu”发布项目时,它使用
    Web.Staging.config
    文件而不是
    Web.MyStagingConfig.config
    来转换配置。有点头疼之后,我意识到我没有配置的“任意CPU”平台默认配置为使用“暂存”配置发布项目(因为我在创建“MyStagingConfig”时从“暂存”配置导入了设置)。

    在Configuration Manager中,检查每个“活动解决方案配置”并确保每个项目的“配置”列都是正确的。(在我的例子中,一个开发人员意外地更改了其中一个值。)

    在VS2015中也有一个bug,但没有什么不同:在我的例子中,我看到当我在解决方案级别创建一个新的概要文件时,mvc项目将无法选择它。它甚至没有出现在下拉列表中


    但是,当我从mvc项目中单击“新建”(选中复选框“创建新解决方案配置”)时,新配置文件才会与我的mvc项目一起出现。

    在您的csproj中,您会发现类似于

      <Target Name="BeforeBuild" Condition="'$(PublishProfileName)' == '' And '$(WebPublishProfileFile)' == ''">
        <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
      </Target>
    
    
    
    这是默认设置。注意,您可以修改这个,但我不推荐这样做


    我建议您检查构建配置设置。从菜单中选择
    Build>configurationmanager
    。验证为项目选择的配置是否为要使用的配置。也就是说,在第二列中,如果您为web.config所在的主构建项目选择了
    Release
    ,那么即使您的解决方案配置标题为
    Debug
    ,您也将进行
    Release
    转换。将
    Release
    更改为
    Debug
    (或适当的设置),它将解决您的问题。

    web.myprofile.config中的设置将不被应用。我看到它们在转换预览中被应用,但不是在部署“但您的构建配置具有特定于构建的设置(例如,调试具有调试相关的设置,但发行版将其关闭)”之后。是的,如果Visual Studio在调试时实际应用了这些设置,那将很酷。相反,它只在发布时应用它们,因此它们实际上是多余的。要么应用项目配置转换和发布转换(发布时),要么都不应用(调试时)。该设置很愚蠢。调试时,应在该配置处于活动状态时应用项目配置转换。发布时,除了应用项目配置转换外,还应应用发布配置文件转换。就目前而言,它们要么都适用,要么都不适用。糟糕透顶。@Triynko我认为这些问题大部分都在ASP.NET Core的新应用程序模型中得到了解决。更像是一个令人瞠目结舌的倒退,回到了“网站”项目过去的工作方式:“在ASP.NET Core中,发布过程已经简化,我们不再存储对项目包含的文件的引用。默认情况下,所有文件都包含在项目中(可以通过更新project.json从项目或发布中排除文件)。当您从Visual Studio发布ASP.NET核心项目时,会发生以下情况:“绝对糟糕。只包含显式包含的文件,以及显式生成选项(如“无”或“内容”)“应该出版。真不敢相信他们竟然倒退了。我又遇到了这种情况,这次我通过删除web.local.config,然后转到properties/publish profiles/local.pubxml>右键单击>“添加配置转换”>在此处重新添加我的更改名称来解决。删除转换后,我重新添加了它,并确保它在配置管理器中使用了正确的配置文件(它是混合的)。在更新LastUsedBuildConfiguration后,我注意到它一直使用旧的值。我只是重新启动VisualStudio并再次单击“预览转换”,它就开始使用新值。所以
      <Target Name="BeforeBuild" Condition="'$(PublishProfileName)' == '' And '$(WebPublishProfileFile)' == ''">
        <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
      </Target>