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

时间:2015-07-31 02:15:59

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

我在Visual Studio 2013 ASP.NET Web API 2项目中进行了以下设置。

  • Web.Develop.config web转换以设置应用设置键值
  • Web.Release.config web transform以删除应用设置密钥
  • 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/>元素都已成功删除。但是,在运行Develop发布配置文件时也会删除<appSettings/>元素。

我想要了解的是:

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

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

1 个答案:

答案 0 :(得分:6)

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

  1. Web.Release.config。这是因为Develop.pubxml文件中的配置目标是Release构建配置。
  2. Web.Develop.config。这是因为发布配置文件(Develop)的名称与转换文件的名称匹配。
  3. 发生的事情是第一个转换删除了<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转换之间的关系而言,我目前的理解是这样的。

    1. 发布配置文件(以及其他内容)包含配置目标
    2. 发布配置文件首先运行映射到其指定配置目标名称的转换(如果存在)
    3. 发布配置文件,然后运行映射到其发布配置文件名称的转换(如果存在)
    4. 这里的关键是可以运行两个 web.config转换。