检测C#中正在运行的平台代码?

时间:2010-12-09 00:24:21

标签: c# asp.net winforms cross-platform

我有C#代码我想在WinForms应用程序和ASP.NET网站中使用。数据库连接字符串虽然各有不同,但我希望能够找出它正在运行的平台并正确设置连接字符串。有没有简单/推荐的方法来做到这一点?

这应该在WinForms和ASP.NET上编译,所以不需要System.WindowsSystem.Web引用。

3 个答案:

答案 0 :(得分:3)

框架已经为您处理了这个问题。使用System.Configuration.ConfigurationManager.AppSettingsConfigurationManager.ConnectionStrings来阅读您的连接字符串,它们将从WinForms中的 App.config 和ASP中的 Web.config 中读取。净。您可以在两个配置文件中添加不同的值。

至于更一般的问题 - 您可以检查System.Web.HttpContext.Current,如果它不是null,那么您肯定在ASP.NET中运行。如果它是null,那么可能不在ASP.NET中,但可能不在请求中。您还可以尝试检查System.Web.HttpRuntime上的一些属性。

编辑:如果您不想添加对System.Web.dll的引用,可以通过Reflection调用上面的内容:首先调用Type.GetType("System.Web.HttpContex"),如果返回{{1}那么你绝对不是在ASP.NET中。如果它返回一个值,则可以继续获取null静态属性。

答案 1 :(得分:2)

建议的方法是将连接字符串存储在配置文件中 - App.Config或Web.Config,并使用ConfigurationManager从中读取。请参阅MSDN中的Storing and Retrieving Connection Strings

答案 2 :(得分:1)

让数据库代码检测到正在运行的平台似乎是错误的解决方案。无论你选择什么,似乎都有办法击败它。

相反,我会让我的应用程序的入口点以声明方式表达它的平台。

enum Platform {
  AspNet,
  WinForms
}

public class DataConnection {
  public DataConnection(Platform platform) {
    ...
  }
}