visual-studio - 解决方案配置,发布配置文件和web.config转换之间的关系

标签 visual-studio web.config-transform publish-profiles

我在Visual Studio 2013 ASP.NET Web API 2项目中具有以下设置。

  • Web.Develop.config Web转换以设置应用程序设置键值
  • Web.Release.config Web转换以删除应用程序设置键
  • Develop.pubxml映射到Web.Develop.config转换
  • Release.pubxml映射到Web.Release.config转换

  • 有关每个的详细信息,请参见下文。

    <!-- Web.Develop.config (Web Config Transform) -->
    <appSettings>
      <add key="ReportInputPath" 
           value="DevelopPath" 
           xdt:Transform="SetAttributes" 
           xdt:Locator="Match(key)" />
      </appSettings>
    

    <!-- Web.Release.config (Web Config Transform) -->
    <appSettings xdt:Transform="Remove" />
    

    <!-- **Develop.pubxml (Publish Profile) -->
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <WebPublishMethod>FileSystem</WebPublishMethod>
        <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
        <LastUsedPlatform>x64</LastUsedPlatform>
        <SiteUrlToLaunchAfterPublish />
        <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
        <ExcludeApp_Data>True</ExcludeApp_Data>
        <publishUrl>Path</publishUrl>
        <DeleteExistingFiles>True</DeleteExistingFiles
        <ExcludeFilesFromDeployment>packages.config</ExcludeFilesFromDeployment>
      </PropertyGroup>
    </Project>
    

    <!-- Release.pubxml (Publish Profile) -->
    <!-- Contents are identical to Develop.pubxml. 
         This is used to target the Web.Release.Config transform. -->
    

    每当我通过发布发布配置文件发布应用程序时,我的<appSettings/>元素都会被成功删除。但是,当同时运行“开发发布”配置文件时,也会删除<appSettings/>元素。

    我想了解的是:

    为什么在运行“开发发布”配置文件而不是设置ReportInputPath值时删除了<appSettings/>元素?

    解决方案/项目配置,发布配置文件和web.config转换之间的关系是什么?

    最佳答案

    运行Develop publish配置文件时为何删除<appSettings/>元素的答案是,因为两个转换按以下顺序运行。

  • Web.Release.config。之所以运行该命令,是因为Develop.pubxml文件中的配置目标是Release构建配置。
  • Web.Develop.config。之所以运行该命令,是因为发布配置文件(开发)的名称与转换文件的名称匹配。

  • 发生的是,第一个转换删除了<appSettings/>元素。第二个转换尝试在该元素中设置键值,但找不到它,因此它默默地失败了。

    我可以通过搜索控制台输出来确认这一点。运行Develop转换时,有一条警告,指出找不到所需的元素。
    Example (shortened for clarity)
    > TransformXml: Applying Transform File: C:\...\MyProject\Web.Develop.config
    > C:\...\MyProject\Web.Develop.config(6,4): Warning : No element in the source document matches '/configuration/appSettings'
    > TransformXml: Not executing SetAttributes (transform line 9, 10)
    

    赛义德·易卜拉欣·哈希米(Sayed Ibrahim Hashimi)发表的Profile specific web.config transforms and transform preview文章对确定此问题非常有帮助。

    就构建配置,发布配置文件和web.config转换之间的关系而言,我目前的理解是。
  • 发布配置文件(除其他外)具有配置目标
  • 发布配置文件首先运行转换,该转换映射到其指定的配置目标名称(如果存在)
  • 发布配置文件,然后运行转换(映射到其发布配置文件名称)(如果存在)

  • 这里的关键是可以运行两个web.config转换。

    关于visual-studio - 解决方案配置,发布配置文件和web.config转换之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31737080/

    相关文章:

    c - 为什么我在 C 中看到重定义错误?

    visual-studio-2013 - VS 2013 MVC项目中的Web.tt导致错误 "value does not fall within the expected range"

    entity-framework - 如何使 Entity Framework 迁移使用 web.config 转换?

    MSBuild 从命令行发布 Web 项目执行包而不是文件系统

    asp.net-mvc - 在 Jenkins CI 中成功构建后打包多个发布配置文件 .pubxml

    c# - 显示在文本框、标签后面的菜单。 ASP.NET/C#

    c# - 使用 SSH.NET 使用 key 文件连接到 SFTP(权限被拒绝(公钥))

    c++ - Visual Studio 2013 : error LNK2019: unresolved external symbol - cuRAND - Random Number Generator

    octopus-deploy - 八达通部署错误 : Found multiple target elements, 但 'Replace' 转换仅适用于第一个匹配