我在Visual Studio 2013 ASP.NET Web API 2项目中进行了以下设置。
下面列出了每种细节。
<!-- 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转换之间的关系是什么?
答案 0 :(得分:6)
运行Develop发布配置文件时删除<appSettings/>
元素的原因的答案是因为两个转换按以下顺序运行。
发生的事情是第一个转换删除了<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转换。