我认为要在 Microsoft Windows 平台上遵循他们的指导,必须对该平台有深入的了解。
根据您关于第三个因素的建议,即在环境中存储配置的建议,我们应该问自己,Windows 平台中的环境变量到底是什么。答案是 Windows 注册表。现在,我确实在开发一个使用 Windows 注册表的服务器应用程序,并且考虑到我的角色(我确实关心持续集成、构建和安装程序),我真的非常讨厌我们必须这样做使用 Windows 注册表,但这就是您在 Windows 平台中所做的。
Windows 注册表显然在与语言和操作系统无关的标准上失败了,但是即使您使用普通的环境变量,在 Windows 平台上,这些都是在 Windows 注册表项中实现的。
我不时犯下将凭据存储在 SCM 中的罪行(顺便说一下,近年来主要是 TFS),但从来没有针对应用程序本身,主要是针对构建基础架构(即永远不会部署在客户站点或部署,并且与应用程序代码完全隔离)。
您可以使用 app/web.config 来存储凭据(还有加密功能),但这通常是个坏主意。
此外,如果您使用数据库作为后端(关系型、非关系型,实际上是任何类型的数据库),一些配置很可能会在那里结束,一些配置可能更适合存储在那里(即在多租户应用程序上) , 你真的希望隔离租户相关的配置,而且通常共享配置最终集中在租户 0 的特殊存储中),只要你可以存储和检索(即在注册表中)打开门带来的密钥你在那里。
关于第二个问题,作为 12factor 宣言的新手(但从我目前所读到的内容,而不是基本概念),我目前无法为您提供关于 .Net 参考架构的建议。
关于第二个问题的更新
另外,关于另一个问题,我想说第二个因素,即依赖关系,如果我们采用字面和严格的方法,可能会阻止我们在 Microsoft 平台上找到一个好的参考实现。
Windows Installer 和更高级别的安装创作工具(Wix、InstallShield 等)与 RubyGems 或 CPAN 无法真正相提并论,而且 NuGet 在普及方面还没有。
您可以寻找查看 NuGet 提要的参考实现,即使作者不知道 12factor,宣言要求非常明智的事情,优秀的开发人员将大多遵循这些或非常相似的概念。
作为这种方法的一个例子,我建议你看一下Ayende的RavenDB,你可以通过 NuGet 得到它,我怀疑它会勾选大多数,如果不是全部的话,12factor guy box ( intro,features和source代码)。