我正在寻找一种方法来以编程方式确定应用程序池在运行时在 IIS 中使用哪个版本的 .NET Framework,然后让网站应用程序使用该信息来选择它应该使用的 *.config 文件。
可能吗?我不知道从哪里开始。
您可能已经足够了解财产的价值System.Environment.Version
基本上:
获取一个 Version 对象,该对象描述公共语言运行时的主要、次要、内部版本和修订号。
基于此,您可以加载配置和/或使用新配置加载新的应用程序域。
我不知道按应用程序池执行此操作的好方法。这将很难管理,并且在执行应用程序池升级时很容易中断,人们不知道为什么。这通常不是大多数人这样做的方式,所以如果可能的话我会避免它。相反,我建议以下替代方案:
出于开发和测试目的,我们使用NConfig库 ( Install-Package NConfig
) 来允许每个主机名进行不同的配置。
但是,我们不会在生产环境中使用它,因为我们必须维护网络场中每台服务器的配置,而这些配置通常是通过自动化进程启动的,因此我们大多数时候甚至都不知道主机名。因此,为了在这些情况下管理每个环境的设置,我们使用 msdeploy 转换配置。(网上有很多关于如何使用它们的教程。)如果需要,它还支持通过配置文件进行多种配置设置。
此外,在您的评论中,您提到了必须运行安装程序才能安装在 .Net 2.0 和 4.0 中运行的站点。我猜这意味着您希望您的配置根据安装的站点而有所不同?我会劝阻这一点。如果存在您无法在两者中工作的重要差异(这将是更好的选择),那么在 .Net 2.0(不是 4.0)中安装和运行它会更容易。
最后,网站没有“简单”的安装。您必须获得 .Net 版本(如果用户有足够旧的 Windows :( )、安全设置、IIS 版本、IIS 插件、通常是某种 SQL、连接字符串等,他们甚至可能没有 2.0。如果MSI 安装这个应用程序是必要的,然后知道这并不容易,你很可能需要自定义很多过程。