2017-07-19 88 views
1

我们正在使用一个库,每个版本都需要在web.config中更新一个值。有没有办法做到这一点本地?是否有一种本地方式来动态更改构建web.config设置?

我们使用具有在web.config

版本属性需要构造每个更新的自定义配置部分库。增量或甚至DateTime.Now等效将工作。

<clientDependency version="6"> 
... 
</clientDependency> 
+0

你能提出需要更新的内容吗?为什么?这种接缝不是最佳实践。然而,使用新的任务运行资源管理器和[配置“包含”功能](https://stackoverflow.com/questions/10300063/can-i-create-config-file-and-include-it-to-web-config )它可能是可能的。 –

+0

对于dev/test/prod等不同的连接字符串或凭证,您可以使用web config变换,但如果它是像构建#那样更改每个构建的东西,则可能需要执行后处理任务来操作配置文件。 –

+1

如果你的意思是改变* deploy *而不是build,你可以做转换。选中此项:[如何在部署Web应用程序项目时转换Web.config](https://msdn.microsoft.com/en-us/library/dd465318(v = vs.100).aspx) –

回答

1

您应该首先回顾一下,为什么每个构建的配置都会发生变化。这似乎并不好。也许你可以改变这一点。

但是,在Visual Studio 2013中引入了Gulp Task Runner。

你可能会滥用它一点点。

Basicly:

+0

首先,这既不奇怪也不坏。 *有*不同的版本(Release vs Debug)和环境(Development vs Testing vs Staging vs Production)。其次,这已经在* deployment *管道中可用。您*可以*在每个构建*和*环境中应用不同的转换。没有必要使用外部工具。 –

+0

实际上,不仅Visual Studio支持此功能,还支持Octopus Deploy,Release Management Services等部署工具,以便更轻松地部署到不同的环境。 –

+0

@PanagiotisKanavos您可以提供一个示例,说明如何在每个环境中增加该值建立?我知道如何用变换替换为静态值 – user3953989

1

您可以尝试使用MSBuild Tasks

也许XMLPoke更新web.config与格式化的日期/时间字符串:

<Target Name="EchoTime"> 
    <Time Format="yyyyMMddHHmmss"> 
     <Output TaskParameter="FormattedTime" PropertyName="currentTime" /> 
    </Time> 
    <Message Text = "$(currentTime)" /> 
</Target> 

<Target Name="UpdateWebConfig"> 
    <XmlPoke 
     XmlInputPath="web.config" 
     Query="//<complete-path>/clientDependency/@version" 
     Value="$(currentTime)" /> 
</Target> 

移动更新部分到外部文件,使用configSource也可以使工作更容易。

相关问题