[{"data":1,"prerenderedAt":629},["ShallowReactive",2],{"article-xamarin-android-platform-version-support":3},{"article":4,"tags":236,"previous":251,"next":518},{"id":5,"title":6,"author":7,"body":8,"createdAt":224,"description":225,"extension":226,"img":227,"meta":228,"navigation":229,"path":230,"seo":231,"stem":232,"tags":233,"updatedAt":224,"__hash__":235},"articles\u002Farticles\u002Fxamarin-android-platform-version-support.md","Xamarin Android - Platform Version Support","[object Object]",{"type":9,"value":10,"toc":222},"minimark",[11,19,29,36,39,80,83,98,106,117,157,159,178,197,202,205,210,215,218],[12,13,14,15,18],"p",{},"So version support and Android is confusing.  Let’s just get the straight.",[16,17],"br",{},"\nIn writing this post I have read things over multiple times.  Do not get discouraged.  Google generally gives three names to the API levels: an API number\u002Finteger, a version number, and a candy name.",[12,20,21,22,28],{},"This is documented on their\n",[23,24,27],"a",{"href":25,"target":26},"http:\u002F\u002Fdeveloper.android.com\u002Fabout\u002Fdashboards\u002Findex.html","_blank","platform dashboard",".  For example KitKat API 19, Version 4.4\n. While working with Xamarin Android, project properties show the following selections.  We have Compile using version, Minimum Android to target\nand Target Android version. Ugh.",[12,30,31],{},[32,33],"img",{"alt":34,"src":35},"","\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-platform-version-suppo_db82-image_2.png",[12,37,38],{},"These values are pushed to the AndroidManifest.xml which is included in your project.",[40,41,45],"pre",{"className":42,"code":43,"language":44,"meta":34,"style":34},"language-xml shiki shiki-themes github-light github-dark","\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n\u003Cmanifest xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\" android:versionCode=\"1\" android:versionName=\"1.0\" package=\"DrawerLayout_V7_Tutorial.DrawerLayout_V7_Tutorial\">  \n    \u003Cuses-sdk android:minSdkVersion=\"19\" android:targetSdkVersion=\"19\" \u002F>  \n    \u003Capplication android:label=\"DrawerLayout_V7_Tutorial\">\u003C\u002Fapplication>  \n\u003C\u002Fmanifest>\n","xml",[46,47,48,56,62,68,74],"code",{"__ignoreMap":34},[49,50,53],"span",{"class":51,"line":52},"line",1,[49,54,55],{},"\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n",[49,57,59],{"class":51,"line":58},2,[49,60,61],{},"\u003Cmanifest xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\" android:versionCode=\"1\" android:versionName=\"1.0\" package=\"DrawerLayout_V7_Tutorial.DrawerLayout_V7_Tutorial\">  \n",[49,63,65],{"class":51,"line":64},3,[49,66,67],{},"    \u003Cuses-sdk android:minSdkVersion=\"19\" android:targetSdkVersion=\"19\" \u002F>  \n",[49,69,71],{"class":51,"line":70},4,[49,72,73],{},"    \u003Capplication android:label=\"DrawerLayout_V7_Tutorial\">\u003C\u002Fapplication>  \n",[49,75,77],{"class":51,"line":76},5,[49,78,79],{},"\u003C\u002Fmanifest>\n",[12,81,82],{},"While the latest versions of Android often provide great APIs for your app, you should\u002Fneed to continue to support older versions of Android until devices\nget updated.",[12,84,85,86,89,90,92,93,97],{},"The Android ",[23,87,88],{"href":25,"target":26},"Platform Versions"," page\nhas details of version and respective codename\u002FAPI level.  Also of interest is the distribution % for each version.  At the time of this post,\ninterestingly KitKat version 4.4 (API 19) has the largest distribution.",[16,91],{},"\nIn order to use several recent platform API’s on an older version device\u002Fplatform Android\u002FXamarin provide what is called\n",[23,94,96],{"href":95,"target":26},"https:\u002F\u002Fdeveloper.android.com\u002Ftools\u002Fsupport-library\u002Findex.html","support libraries",".",[12,99,100,101,105],{},"The Android Support Library package is a ",[102,103,104],"strong",{},"set of code libraries that provide backward-compatible versions of Android framework APIs","\nas well as features that are only available through the library APIs.  Each support library is backward-compatible to a specific Android API level.",[12,107,108,109,111,112,116],{},"This means that your application can use the libraries features and still be compatible with devices running older API levels.  These support libraries are included in your project and help your application run efficiently on older platforms.  Support Libraries each target a base Android API level and each provides a different set of features. In order to effectively use the libraries, it is important to consider what features you want to support and understand what features are\nsupported by each library at what Android API level.",[16,110],{},"\nBased on Android ",[23,113,115],{"href":114,"target":26},"https:\u002F\u002Fdeveloper.android.com\u002Ftools\u002Fsupport-library\u002Ffeatures.html","Support Library Features","  -",[12,118,119,123,129,132,138,141,143,144,147,148,150,153],{},[120,121,122],"em",{},"In general, we recommend including the ",[23,124,126],{"href":125},"https:\u002F\u002Fdeveloper.android.com\u002Ftools\u002Fsupport-library\u002Ffeatures.html#v4",[120,127,128],{},"v4 support",[120,130,131],{}," and ",[23,133,135],{"href":134},"https:\u002F\u002Fdeveloper.android.com\u002Ftools\u002Fsupport-library\u002Ffeatures.html#v7-appcompat",[120,136,137],{},"v7 appcompat",[120,139,140],{}," libraries, because they support a wide range of Android versions and provide APIs for recommended user interface patterns.",[16,142],{},"\nIn a recent blog post I am working with ActionBars and Toolbars.  I can ",[23,145,146],{"href":114,"target":26},"see"," v7 appcompat library adds support for the ActionBar user interface design patter.  v7 appcompat also includes support for material design implementations.  Now looking at the Toolbar is implemented in API level 21 or higher.  I do want my code to run on KitKat (version 4.4) API level 19.  Toolbar minimum is API 21 which is version 5 (Lollipop).  So how do I setup my above minSdkVersion and targetSdkVersion?",[16,149],{},[102,151,152],{},"Compile using Android version: ",[154,155,156],"u",{},"Set to the version that has all the features you need.",[154,158],{},[12,160,161,163,166,167,170,171,174,177],{},[154,162],{},[102,164,165],{},"Minimum Android to Target – ","android:minSdkVersion : Specifies the minimum API Level on which the application is able to ",[102,168,169],{},"run",". The default value is \"1\".  Note: the Android system will prevent the user from installing the application if the system's API Level is lower than the value specified in this attribute.  ",[154,172,173],{},"Set to the lowest version you want to support.\n",[102,175,176],{},"\nTarget Android version ","- android:targetSdkVersion :",[12,179,180,181,185,186,189,193,194],{},"To allow your app to take advantage of these changes and ensure that your app fits the\nstyle of each user's device, you should set the ",[23,182,184],{"href":183},"https:\u002F\u002Fdeveloper.android.com\u002Fguide\u002Ftopics\u002Fmanifest\u002Fuses-sdk-element.html#target","targetSdkVersion"," value to match the latest Android version available (If not set, the default value equals that given to minSdkVersion).  This attribute informs the system that you have tested against the target version and the system should not enable any compatibility behaviors to maintain your app's forward-compatibility with the target version. The application is still able to run on older versions (down to minSdkVersion).  This does get a little confusing but bottom line ",[120,187,188],{},"To maintain your application along with each Android release, you should increase the value of this attribute to match the latest API level, then thoroughly test your application on the corresponding platform version.  ",[23,190,192],{"href":191,"target":26},"http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F4568267\u002Fandroid-min-sdk-version-vs-target-sdk-version\u002F4994039#","Stack Overflow had a good definition",":  With this attribute set, the application says that it is able to run on older versions (down to minSdkVersion), but was explicitly tested to work with the version specified here. Specifying this target version allows the platform to disable compatibility settings that are not required for the target version (which may otherwise be turned on in order to maintain forward-compatibility) or enable newer features that are not available to older applications. This does not mean that you can program different features for different versions of the platform—it simply informs the platform that you have tested against the target version and the platform should not perform any extra work to maintain forward-compatibility with the target version. ",[154,195,196],{},"Set to Use Compile using SDK version.",[12,198,199],{},[32,200],{"alt":34,"src":201},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-platform-version-suppo_db82-image_4.png",[12,203,204],{},"Note: In Xamarin Studio the above choices appear slightly different.  Within XS, Project Options – General shows Target framework, then also Project Options – Android Application (2nd screenshot below)",[12,206,207],{},[32,208],{"alt":34,"src":209},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-platform-version-suppo_db82-image_6.png",[12,211,212],{},[32,213],{"alt":34,"src":214},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-platform-version-suppo_db82-image_8.png",[12,216,217],{},"Target framework: Compile using Android version\nMinimum Android version: is the same as Minimum Android to target\nTarget Android version:is the same as Target Android version",[219,220,221],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":34,"searchDepth":58,"depth":58,"links":223},[],"2020-06-11T20:28:49.852Z","Version support and Android is confusing.","md","\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-platform-version-suppo_db82-image_thumb.png",{},true,"\u002Farticles\u002Fxamarin-android-platform-version-support",{"title":6,"description":225},"articles\u002Fxamarin-android-platform-version-support",[234],"xamarin","lGFnwKJcW4IOUUQJPuEloQRzzxk8T48RzHX_sw9r3kc",[237],{"id":238,"title":239,"body":240,"description":244,"extension":226,"img":245,"meta":246,"name":234,"navigation":229,"path":247,"seo":248,"stem":249,"__hash__":250},"tags\u002Ftags\u002Fxamarin.md","Xamarin",{"type":9,"value":241,"toc":242},[],{"title":34,"searchDepth":58,"depth":58,"links":243},[],"Xamarin is an open-source platform for building modern and performant applications for iOS, Android, and Windows with . NET. Xamarin is an abstraction layer that manages communication of shared code with underlying platform code.","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1598313183973-4effcded8d5e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=675&q=80",{},"\u002Ftags\u002Fxamarin",{"description":244},"tags\u002Fxamarin","deVB66I7cJMtWvqybFh5POf9LBCBwHNe-5ZGMOzV5G4",{"id":252,"title":253,"author":7,"body":254,"createdAt":224,"description":507,"extension":226,"img":508,"meta":509,"navigation":229,"path":510,"seo":511,"stem":512,"tags":513,"updatedAt":224,"__hash__":517},"articles\u002Farticles\u002Fstarting-jquery-and-get-the-downloads-and-patchesfor-visual-studio-net-2008.md","Starting jQuery and Get the downloads and patches(for Visual Studio.NET 2008)",{"type":9,"value":255,"toc":505},[256,268,276,502],[12,257,258,259,263,264,267],{},"1.) Download install VS.NET 2008 SP1 patch   Visual Studio 2008 SP1 has the following patch to allow IntelliSense with jQuery found\n",[23,260,262],{"href":261,"target":26},"http:\u002F\u002Fcode.msdn.microsoft.com\u002FKB958502\u002FRelease\u002FProjectReleases.aspx?ReleaseId=1736","here",".  Note: this is a patch that is applied\nafter .NET 3.5 SP1 and Visual Studio 2008 SP1.  Information about this patch can be found\n",[23,265,262],{"href":266,"target":26},"http:\u002F\u002Fblogs.msdn.com\u002Fwebdevtools\u002Farchive\u002F2008\u002F11\u002F07\u002Fhotfix-to-enable-vsdoc-js-intellisense-doc-files-is-now-available.aspx",".\nI did find that the vsdoc.js version must match the version of jquery in order for the intellisense to function correctly.  If the versions mismatch intellisense\nwill not work.",[12,269,270,271,275],{},"2.) ",[23,272,274],{"href":273,"target":26},"http:\u002F\u002Fdocs.jquery.com\u002FDownloading_jQuery","Download"," jQuery documentation library  ",[277,278,279,288,294,297,427,432,496,499],"blockquote",{},[12,280,281,282,284,285],{},"3.) ",[23,283,274],{"href":273,"target":26}," jQuery \n",[32,286],{"alt":34,"src":287},"\u002Farticles\u002Fimages\u002FAsp.netCompilationModels_86E6\u002Fimage_4a.png",[12,289,290,291],{},"4.) Copy both 2 and 3 to your solution Scripts folder\n",[32,292],{"alt":34,"src":293},"\u002Farticles\u002Fimages\u002FAsp.netCompilationModels_86E6\u002Fimage_8.png",[12,295,296],{},"5.) In your aspx reference the jquery file",[40,298,302],{"className":299,"code":300,"language":301,"meta":34,"style":34},"language-js shiki shiki-themes github-light github-dark","\u003Cscript src=\"Scripts\u002Fjquery-1.2.6.min.js\" type=\"text\u002Fjavascript\">\u003C\u002Fscript>    or    \u003Casp:ScriptManager runat=\"server\" ID=\"scriptmanager1\">     \n    \u003CScripts>      \n        \u003Casp:ScriptReference Path=\"~\u002FScripts\u002Fjquery-1.2.6.min\" \u002F>      \n    \u003C\u002FScripts>      \n\u003C\u002Fasp:ScriptManager> \n","js",[46,303,304,370,381,405,414],{"__ignoreMap":34},[49,305,306,310,314,318,322,326,329,331,334,337,339,342,344,347,350,352,355,359,361,364,367],{"class":51,"line":52},[49,307,309],{"class":308},"sVt8B","\u003C",[49,311,313],{"class":312},"s9eBZ","script",[49,315,317],{"class":316},"sScJk"," src",[49,319,321],{"class":320},"szBVR","=",[49,323,325],{"class":324},"sZZnC","\"Scripts\u002Fjquery-1.2.6.min.js\"",[49,327,328],{"class":316}," type",[49,330,321],{"class":320},[49,332,333],{"class":324},"\"text\u002Fjavascript\"",[49,335,336],{"class":308},">\u003C\u002F",[49,338,313],{"class":312},[49,340,341],{"class":308},">    or    ",[49,343,309],{"class":320},[49,345,346],{"class":316},"asp",[49,348,349],{"class":308},":ScriptManager runat",[49,351,321],{"class":320},[49,353,354],{"class":324},"\"server\"",[49,356,358],{"class":357},"sj4cs"," ID",[49,360,321],{"class":320},[49,362,363],{"class":324},"\"scriptmanager1\"",[49,365,366],{"class":320},">",[49,368,369],{"class":308},"     \n",[49,371,372,375,378],{"class":51,"line":58},[49,373,374],{"class":308},"    \u003C",[49,376,377],{"class":357},"Scripts",[49,379,380],{"class":308},">      \n",[49,382,383,386,388,391,394,397,399,402],{"class":51,"line":64},[49,384,385],{"class":308},"        \u003C",[49,387,346],{"class":312},[49,389,390],{"class":308},":",[49,392,393],{"class":357},"ScriptReference",[49,395,396],{"class":316}," Path",[49,398,321],{"class":320},[49,400,401],{"class":324},"\"~\u002FScripts\u002Fjquery-1.2.6.min\"",[49,403,404],{"class":308}," \u002F>      \n",[49,406,407,410,412],{"class":51,"line":70},[49,408,409],{"class":308},"    \u003C\u002F",[49,411,377],{"class":357},[49,413,380],{"class":308},[49,415,416,419,421,424],{"class":51,"line":76},[49,417,418],{"class":320},"\u003C\u002F",[49,420,346],{"class":316},[49,422,423],{"class":308},":ScriptManager",[49,425,426],{"class":320},">\n",[12,428,429],{},[102,430,431],{},"Some Quick Tips",[433,434,435,439,451,457,470,476,482],"ul",{},[436,437,438],"li",{},"If you are using a master page the script reference only needs to exist in the master page",[436,440,441,442,444,445,447,448,450],{},"javascript intellisense will not work in user controls by default as\nthe user control doesn’t have a reference to the js file.  A work around (use the following at the top of the user control).  At runtime ASP.NET will\nnot render this tag however Visual Studio will evaluate the script and provide intellisense",[16,443],{},"\n\u003C% if (false) { %>",[16,446],{},"\n      \u003Cscript src=”..\u002FScripts\u002Fjquery-1.2.6.min.js” type=”text\u002Fjavascript”>",[16,449],{},"\n\u003C% } %>",[436,452,453,454,456],{},"a recommended method of including js files is to create one js file which entail will include references to any number of specific js files, then on your web page\ninclude a reference to this one single js file",[16,455],{},"\n\u003Creference path=”~\u002FScripts\u002Fjquery-1.2.6.min.js” \u002F>",[436,458,459,460,462,465,466,469],{},"a good approach is to remove the version number from the jquery files to allow easier updates to these files in the future",[16,461],{},[102,463,464],{},"Path(s) for Script References","     * ",[102,467,468],{},"File-Relative Paths"," i.e. ..\u002F..\u002Ffile.js This type of path\nis relative to the currently loaded file.  Support - ASP.NET Web forms \u002F MVC",[436,471,472,475],{},[102,473,474],{},"App-Relative Paths"," i.e. ~\u002Ffolder\u002Ffile.js  Is calculated\nfrom the base of your application.  ASP.NET Web forms supports this type of path however\nthe path must be within a scriptreference tag or select asp.net\ncontrols which have runat=”server”",[436,477,478,481],{},[102,479,480],{},"Site-Relative Paths"," i.e. \u002Ffolder\u002Ffile.js  Is calculated from the base of your site.  Supported\nby ASP.NET Web forms \u002F MVC however is not supported by Visual Studio",[436,483,484,487,488,491,495],{},[102,485,486],{},"Absolute Paths"," i.e. ",[23,489],{"href":490},"http:\u002F\u002Fsite\u002Ffolder\u002Ffile.js",[23,492,490],{"href":490,"rel":493},[494],"nofollow"," \nSupported by ASP.NET Web forms \u002F MVC and Visual Studio   If using Visual Studio(ASP.NET Web forms) recommended to use App-Relative paths ~\u002Ffolder\u002Ffile.js. ",[12,497,498],{},"If using MVC use file-relative paths.",[32,500],{"src":501,"alt":34},"\u002Farticles\u002Fimages\u002Fjquery.jpg",[219,503,504],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":34,"searchDepth":58,"depth":58,"links":506},[],null,"\u002Farticles\u002Fimages\u002Fimage_thumb.png",{},"\u002Farticles\u002Fstarting-jquery-and-get-the-downloads-and-patchesfor-visual-studio-net-2008",{"title":253,"description":507},"articles\u002Fstarting-jquery-and-get-the-downloads-and-patchesfor-visual-studio-net-2008",[514,515,516],"aspnet","javascript","visualstudio","CaoqzxSPqdjjJIKDlApGzP7mizluXjytJfH68p7chaE",{"id":519,"title":520,"author":507,"body":521,"createdAt":620,"description":621,"extension":226,"img":541,"meta":622,"navigation":229,"path":623,"seo":624,"stem":625,"tags":626,"updatedAt":620,"__hash__":628},"articles\u002Farticles\u002Fazure-devops-file-transformation-pipeline.md","Azure DevOps File Transformation Pipeline",{"type":9,"value":522,"toc":618},[523,526,532,544,547,557,560,581,584,605],[12,524,525],{},"Running locally via Visual Studio and JetBrains Rider and managing the ASPNETCORE_ENVIRONMENT variable has been challenging.  Changing and setting ASPNETCORE_ENVIRONMENT within launchSettings.json and\u002For within Project Properties impacts the web.{envrionment}.config files.  Without the appropriate configuration within the publish steps the site was being deployed with incorrect settings and it was time consuming to track it back to the best approach.  So for now I have a pipeline build process setup for each AppService ‘slot’ setting different BuildConfiguration within each to ensure the most appropriate web.config is deployed.",[12,527,528,529,531],{},"This is a .net core asp.net web application so why the web.config? It appears that locally during IIS Express\u002FIIS there is still a dependency on this web.config to identify the hosting model (inprocess) and reference to the exe that would be run.  This is of course when deploying to Windows infrastructure.",[16,530],{},"\nProject Properties – Environment variables",[12,533,534],{},[23,535,537],{"href":536},"\u002Farticles\u002Fimages\u002Fimage_637262774405512580.png",[32,538],{"style":539,"title":540,"src":541,"alt":540,"width":542,"height":543},"display: inline;","image","\u002Farticles\u002Fimages\u002Fimage_thumb_637262774407471496.png",457,345,[12,545,546],{},"My launchSettings.json – you can see I can modify before running how IIS or IIS Express identifies the environment variable",[12,548,549],{},[23,550,552],{"href":551},"\u002Farticles\u002Fimages\u002Fimage_637262774409386358.png",[32,553],{"style":539,"title":540,"src":554,"alt":540,"width":555,"height":556},"\u002Farticles\u002Fimages\u002Fimage_thumb_637262774411646559.png",463,415,[12,558,559],{},"The resultant\u002Frelated web.configs looks like the following for Development and Staging environments.",[12,561,562,563,571,573,574],{},"web.config\n",[23,564,566],{"href":565},"\u002Farticles\u002Fimages\u002Fimage_637262774414383837.png",[32,567],{"style":539,"title":540,"src":568,"alt":540,"width":569,"height":570},"\u002Farticles\u002Fimages\u002Fimage_thumb_637262774416208149.png",484,113,[16,572],{},"\nweb.Staging.config (you can see the addition of the xdt:Transform=”Replace” attribute which informs publish that when building for Staging to replace this variable within web.config with this value)\n",[23,575,577],{"href":576},"\u002Farticles\u002Fimages\u002Fimage_637262774419133421.png",[32,578],{"style":539,"title":540,"src":579,"alt":540,"width":569,"height":580},"\u002Farticles\u002Fimages\u002Fimage_thumb_637262774421036401.png",117,[12,582,583],{},"By default the build process on Azure DevOps – Pipelines was ignoring any file transformation requirements.  In order to establish File Transformation on publish notice the –configuration $(BuildConfiguration)",[12,585,586,594,596,597],{},[23,587,589],{"href":588},"\u002Farticles\u002Fimages\u002Fimage_637262774423325714.png",[32,590],{"style":539,"title":540,"src":591,"alt":540,"width":592,"height":593},"\u002Farticles\u002Fimages\u002Fimage_thumb_637262774425301819.png",661,295,[16,595],{},"\nand the respective variable that is used during publish to identify the appropriate configuration to use (development\u002Fstaging etc.)\n",[23,598,600],{"href":599},"\u002Farticles\u002Fimages\u002Fimage_637262774427383207.png",[32,601],{"style":539,"title":540,"src":602,"alt":540,"width":603,"height":604},"\u002Farticles\u002Fimages\u002Fimage_thumb_637262774428896829.png",702,164,[12,606,607,608,610],{},"After the build and using App Service Editor my web.config was successfully transformed",[16,609],{},[23,611,613],{"href":612},"\u002Farticles\u002Fimages\u002Fimage_637262774431201007.png",[32,614],{"style":539,"title":540,"src":615,"alt":540,"width":616,"height":617},"\u002Farticles\u002Fimages\u002Fimage_thumb_637262774433117797.png",700,190,{"title":34,"searchDepth":58,"depth":58,"links":619},[],"2020-05-28T15:44:03.462Z","Azure DevOps. Build Pipelines and establishing build configurations when deploying to a Windows environment.  The following is quick documentation walking through the process to ensure appropriate web.config files and transforms are performing during the publish steps within your pipeline.  This is one approach used, while I believe there are still other alternatives available.",{},"\u002Farticles\u002Fazure-devops-file-transformation-pipeline",{"title":520,"description":621},"articles\u002Fazure-devops-file-transformation-pipeline",[627],"azure","lk4UjX3qvCsYs7rdaocW7xYDRc5SC2dkZpoMWRp45C4",1781574770182]