Is there an example of a twelve-factor app with tweaks specifically for a .NET/TFS environment?

.net, soa, tfs

Solution

I have read the part about configuration, and the authors clearly don't understand the use of configuration files in .NET. The issues they express are issues we used to have with .ini files. These issues do not exist with .NET because:

- A "desktop" application will have a single config file per deployment. "app.config" will exist as program.exe.config deployed to the same folder as the application.

- In a web application, a hierarchy of web.config files will exist, again, in well-defined locations, and with a well-defined name.

- The web.config transforms feature in Visual Studio 2010 permits the main configuration file to be checked into source control, along with transform files which specify how to automatically edit the main file for each build configuration (environment). All of these files may be stored in source control.

- While it is the default for credentials to be stored in such files (and therefore checked into source control), this is not necessary.

- At least in the case of web applications, the MSDEPLOY feature of IIS along with the Web Publishing Pipeline of Visual Studio 2010, permit the deployment to be parameterized. By default, this includes parameterization of connection strings, one of the main areas where credentials are likely to occur. This can be extended to include parameterization of all credentials or other sensitive data, so that developers do not have access to this information. The parameters may be filled in as part of the deployment process.

Problem

There is an excellent document called the "Twelve-Factor App" (http://www.12factor.net/) in which the authors attempt to define the perfect way to design, build, and deploy a modern app-as-a-service. The document is very general and in many cases the practices described are not optimal, not easily possible or in contravention of Microsoft's best practices. eg: The document discourages using config files but rather to use environment variables for config. This would seem incorrect in the .NET where it is common (best?) practice to use XML config files. In an ideal world (i.e. forget budget/technical/skills constraints) in an organisation where the Microsoft platform has been chosen as the platform of choice for all deployments and .NET/TFS the development environment/tools of choice how would one follow the guidance in the Twelve-Factor App? Are there any good examples of such an application (perhaps an open source one that has an excellent reference architecture)?

Original source