I want to Update the Web.config file using Azure DevOps Release Pipeline.
I am using [Update Config][1] Task from MarketPlace.
[1]: https://marketplace.visualstudio.com/items?itemName=digitalmedia34.updateconfig
Here Is the Web.config File
<!-- Some Contents -->
<configuration>
<appSettings>
<add key="Setting1" value="local setting"/>
<add key="CommonSetting" value="local common setting"/>
</appSettings>
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=LocalSQLServer;Initial Catalog=MyReleaseDB;User ID=xxxx;Password=xxxx" />
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.7.2"/>
<httpRuntime targetFramework1="4.7.2"/>
</system.web>
</configuration>
I am able to change the value of some configuration by adding variables like [Variables]
[2]: https://i.stack.imgur.com/uq85Y.png
My Question is how can I change the values of Nested Property. For Example if I want to change the targetFramework in
<system.web>
<compilation debug="true" targetFramework="4.7.2"/>
<httpRuntime targetFramework1="4.7.2"/>
</system.web>
Please let me know how can I update these values
Thanks in advance
How to Update the .config file using Azure DevOps "Update config" Task
You could use the task Replace Tokens to update the key's values,
the format of variable in .config file is #{TestVersion}#:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="Setting1" value="local setting"/>
<add key="CommonSetting" value="local common setting"/>
</appSettings>
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=LocalSQLServer;Initial Catalog=MyReleaseDB;User ID=xxxx;Password=xxxx" />
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="#{TestVersion}#"/>
<httpRuntime targetFramework1="#{TestVersion}#"/>
</system.web>
</configuration>
Use Replace Tokens task to update the key's values:
And define the key's values on the Variables.
Related
I am trying to use the Web.Release.config file to store an alternative MySQL connection string ready for the live environment, but I just can't seem to get it to work.
In my Web.config I have my local db set up like so:
<connectionStrings>
<add name="MySQLConnection" connectionString="Server=localhost;Database=local;Uid=userid;Pwd=12345678;" providerName="System.Data.MySqlClient" />
</connectionStrings>
Then my Web.Release.config looks like this:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="MySQLConnection" connectionString="Server=localhost;Database=live;Uid=userid;Pwd=12345678;" providerName="System.Data.MySqlClient"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
</configuration>
And I am grabbing my connection string in code using:
ConfigurationManager.ConnectionStrings["MySQLConnection"].ConnectionString;
I have tried switching the config version and running and I get the exact same data being pulled out, all from the local db. If anyone could point me in the right direction I'd really appreciate it!
I've made several configurations inside a project for different environments, one is debug and another is release
Web.config:
<configuration>
<connectionStrings>
<add name="InvitationEntity" connectionString="metadata=res://*/Models.InvitationSystem.csdl|res://*/Models.InvitationSystem.ssdl|res://*/Models.InvitationSystem.msl;provider=System.Data.SqlClient;provider connection string="data source=192.168.7.131;initial catalog=Invitation_Debug;persist security info=True;user id=invitation;password=debugMe;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
<appSettings>
<add key="FilePath" value="D:\temp"/>
<add key="debugMode" value="Y"/>
</appSettings>
</configuration>
Web.debug.config:
<?xml version="1.0" encoding="utf-8"?>
<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--
In the example below, the "SetAttributes" transform will change the value of
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator
finds an attribute "name" that has a value of "MyDB".
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
-->
<system.web>
<!--
In the example below, the "Replace" transform will replace the entire
<customErrors> section of your web.config file.
Note that because there is only one customErrors section under the
<system.web> node, there is no need to use the "xdt:Locator" attribute.
<customErrors defaultRedirect="GenericError.htm"
mode="RemoteOnly" xdt:Transform="Replace">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
-->
</system.web>
<connectionStrings xdt:Transform="Replace">
<add name="InvitationEntity" connectionString="metadata=res://*/Models.InvitationSystem.csdl|res://*/Models.InvitationSystem.ssdl|res://*/Models.InvitationSystem.msl;provider=System.Data.SqlClient;provider connection string="data source=192.168.7.131;initial catalog=Invitation_Debug;persist security info=True;user id=invitation;password=debugMe;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
Web.live.config:
<?xml version="1.0" encoding="utf-8"?>
<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--
In the example below, the "SetAttributes" transform will change the value of
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator
finds an attribute "name" that has a value of "MyDB".
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
-->
<system.web>
<!--
In the example below, the "Replace" transform will replace the entire
<customErrors> section of your web.config file.
Note that because there is only one customErrors section under the
<system.web> node, there is no need to use the "xdt:Locator" attribute.
<customErrors defaultRedirect="GenericError.htm"
mode="RemoteOnly" xdt:Transform="Replace">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
-->
</system.web>
<connectionStrings xdt:Transform="Replace">
<add name="InvitationEntity" connectionString="metadata=res://*/Models.InvitationSystem.csdl|res://*/Models.InvitationSystem.ssdl|res://*/Models.InvitationSystem.msl;provider=System.Data.SqlClient;provider connection string="data source=192.168.7.133;initial catalog=Invitation_Debug;persist security info=True;user id=invitation;password=Invi#2014;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
Here's the problem:
Whenever I use debug or release config, the connection string is still the one in web.config instead of that in web.release.config
Is there anything that I did wrong?
It is sometimes better to use item-by-item transformations. Instead of section replacement use
<add name="InvitationEntity" connectionString="metadata=res://*/Models.InvitationSystem.csdl|res://*/Models.InvitationSystem.ssdl|res://*/Models.InvitationSystem.msl;provider=System.Data.SqlClient;provider connection string="data source=192.168.7.133;initial catalog=Invitation_Debug;persist security info=True;user id=invitation;password=Invi#2014;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" xdt:Transform="Replace" xdt:Locator="Match(name)"/>
It is very useful to use this approach when you have lots of attributes in node and need to change only one, you just use SetAttributes instead of Replace for example.
Is your release build setup to use the Web.live.config file? by default Release expects a file named Web.Release.Config I'm just mentioning this because the file is listed as Web.live.config but you are calling it "Release". If it's just a typo and the names are consistent or if your release build configuration is set to "live" then ignore this.
For me, going to properties of the transformation file and changing the property; Copy to Output Directory to Copy Always did the trick. Got a hint from Matt Kogaj's answer
You have to remove property xdt:Transform in ConnectionString Tag. Like below;
<connectionStrings>
<add name="InvitationEntity" connectionString="metadata=res://*/Models.InvitationSystem.csdl|res://*/Models.InvitationSystem.ssdl|res://*/Models.InvitationSystem.msl;provider=System.Data.SqlClient;provider connection string="data source=192.168.7.133;initial catalog=Invitation_Debug;persist security info=True;user id=invitation;password=Invi#2014;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
I'm trying to configure my visual studio 2013 asp.net mvc application to use the ncache provider for session state.
So far I have added a project reference to Alachisoft.NCache.SessionStoreProvider and Alachisoft.NCache.Web
I have also followed the steps found here, including point 9 regarding web.config and now have the following system.web section in my web.config
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5" >
<assemblies>
<add assembly="Alachisoft.NCache.SessionStoreProvider,Version=4.1.0.0,Culture=neutral,PublicKeyToken=CFF5926ED6A53769"/>
</assemblies>
</compilation>
<httpRuntime targetFramework="4.5" />
<sessionState cookieless="false" >
<providers>
<add name="NCacheSessionProvider"
type="Alachisoft.NCacheExpress.Web.SessionState.NSessionStoreProvider"
sessionAppId="NCacheTest"
cacheName="MyClusterCache"
writeExceptionsToEventLog="false"
enableLogs="false"/>
</providers>
</sessionState>
</system.web>
However when I debug my app it still appears to be using the default inproc session state as everything works ok but my cache shows a count of 0 objects.
Using the NCache api I can add items to the cache just fine which shows up in my NCache Management console statistics.
Can anyone describe how they have set this up or see anything I am missing? Thanks in advance
I solved my problem by realising I needed to add mode="Custom" and customProvider="XXXX" attributes to the sessionState tag in the web config. It worked when I added these.
My working Web config now includes
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5" >
<assemblies>
<add assembly="Alachisoft.NCache.SessionStoreProvider,Version=4.1.0.0,Culture=neutral,PublicKeyToken=CFF5926ED6A53769"/>
</assemblies>
</compilation>
<httpRuntime targetFramework="4.5" />
<sessionState mode="Custom" customProvider="NCacheSessionProvider" cookieless="false" >
<providers>
<add name="NCacheSessionProvider"
type="Alachisoft.NCache.Web.SessionState.NSessionStoreProvider"
sessionAppId="NCacheTest"
cacheName="MyClusterCache"
writeExceptionsToEventLog="false"
enableLogs="false"/>
</providers>
</sessionState>
</system.web>
When I add to my session state I can now see 1 object added to my NCache cache.
When I build my application using Visual Studio in either debug or release mode the connection string that I'm trying to transform doesn't get inserted into the finalised web.config file
Relevant section of web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
</connectionStrings>
</configuration>
web.debug.config file:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings xdt:Transform="Replace" />
<connectionStrings>
<add name="DefaultConnection" xdt:Transform="Insert" providerName="System.Data.SqlClient"
connectionString="string value" />
</connectionStrings>
</configuration>
I've tried the files with this site and it seems to work ok
It turns out that what I had was fine but that the modified web.config file only gets generated when you publish the website.
I wrote a httphandler to handle all XSLT requests.
The name of the handler is XSLTHandler.cs.
web.config
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpHandlers>
<add verb="*" path="*.xsl" type="XSLTHandler" />
</httpHandlers>
</system.web>
</configuration>
I got this error message, dont know how to fix it.
Configuration Error Description: An error occurred during the
processing of a configuration file required to service this request.
Please review the specific error details below and modify your
configuration file appropriately.
Parser Error Message: Could not load type 'XSLTHandler'.
What you're missing is the assembly and namespace that XSLTHandler belongs in, from MSDN. So if it's located in your current project, it should look like this:
<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="*.xsl"
type="WebApplicationName.XSLTHandler, WebApplicationName" />
</httpHandlers>
</system.web>
</configuration>
The MSDN link shows how to configure for both the classic and integrated modes
https://msdn.microsoft.com/en-in/library/ms228090(v=vs.80)
Note that you need to provide the proper namespace of the handler you are using
Example:
<configuration>
<system.web>
<!--Classic-->
<httpHandlers><add verb="*" path="*.sample" name="HttpHandler" type="Handler.kHttpHandler"/></httpHandlers>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
<system.webServer>
<!--Integrated mode-->
<handlers><add verb="*" path="*.sample" name="HttpHandler" type="Handler.kHttpHandler"/></handlers>
</system.webServer>
</configuration>