解决方案配置、发布配置文件和 web.config 转换之间的关系
Relationship between solution configuration, publish profile, and web.config transforms
我在 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/>
元素将被删除。
我想了解的是:
为什么 <appSettings/>
元素在我 运行 开发发布配置文件而不是设置 ReportInputPath 值时被删除?
solution/project 配置、发布配置文件和 web.config 转换之间的关系是什么?
开发发布配置文件 运行 时删除 <appSettings/>
元素的原因是因为两个转换 运行 的顺序如下。
- Web.Release.config。这是 运行 因为 Develop.pubxml 文件中的配置目标是发布构建配置。
- Web.Develop.config。这是 运行 因为发布配置文件的名称 (Develop) 与转换文件的名称匹配。
第一个转换删除了 <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 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/>
元素将被删除。
我想了解的是:
为什么 <appSettings/>
元素在我 运行 开发发布配置文件而不是设置 ReportInputPath 值时被删除?
solution/project 配置、发布配置文件和 web.config 转换之间的关系是什么?
开发发布配置文件 运行 时删除 <appSettings/>
元素的原因是因为两个转换 运行 的顺序如下。
- Web.Release.config。这是 运行 因为 Develop.pubxml 文件中的配置目标是发布构建配置。
- Web.Develop.config。这是 运行 因为发布配置文件的名称 (Develop) 与转换文件的名称匹配。
第一个转换删除了 <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 转换可能是 运行.