Search code examples
asp.netdevelopment-environmentproduction-environment

asp.net production / development environments


Most of my previous web applications have built using the pyramid (python) framework. With pyramid, it is possible to run the application in either development or production mode. This is achieved by providing the location of a production.ini or a development.ini settings file as one of the start up arguments to the application.

This file contains settings relating to logging levels, error reporting and database connections. The equivalent of these files in the .net world would appear to be web.config files. I assume i can create different execution environments, by simply creating a new web.config, renaming it to something appropriate, and restarting the application.

My question is, how can i get my app to target the correct *.config file (hypothetically call them production.config and development.config)?


Solution

  • You may want to look at MSDeploy. I use this for similar situations and it's helped me establish a single parameters file (of what is to be replaced, regardless of if it's XML, a filepath, text file, etc.) and multiple set parameter files [you can read about declareParam and setParam here.

    Without knowing too much of your structure you are basically going to do something to the effect of this.

    msdeploy -verb:sync -source:contentPath=c:\pathtosite\root -dest:package=c:\package.zip -declareParamFile=c:\packageparameters.xml"
    

    Create an associated parameters file for each environment such as

    development.xml
    staging.xml
    production.xml 
    

    (Here is a good explanation of parameter file setup)

    then for your deploy you would have something (depending on the providers you want to use)

    msdeploy -verb:sync -source:package=c:\package.zip -dest:contentPath=c:\inetpub\production -setParamFile=c:\<environment>.xml
    

    The # of providers is pretty extensive. Content Path is just an easy example, but you can pull directly from IIS, to IIS, etc. Pretty robust.