Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测C#中运行的平台代码?_C#_Asp.net_Winforms_Cross Platform - Fatal编程技术网

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

检测C#中运行的平台代码?,c#,asp.net,winforms,cross-platform,C#,Asp.net,Winforms,Cross Platform,我想在WinForms应用程序和ASP.NET网站中使用C#代码。不过,数据库连接字符串各不相同,因此我希望能够找出它运行在哪个平台上,并适当地设置连接字符串。有没有一种简单/推荐的方法可以做到这一点 这应该在WinForms和ASP.NET上编译,因此不需要System.Windows或System.Web参考。框架已经为您处理了这一问题。使用System.Configuration.ConfigurationManager.AppSettings或ConfigurationManager.c

我想在WinForms应用程序和ASP.NET网站中使用C#代码。不过,数据库连接字符串各不相同,因此我希望能够找出它运行在哪个平台上,并适当地设置连接字符串。有没有一种简单/推荐的方法可以做到这一点


这应该在WinForms和ASP.NET上编译,因此不需要
System.Windows
System.Web
参考。框架已经为您处理了这一问题。使用
System.Configuration.ConfigurationManager.AppSettings
ConfigurationManager.connectionString
读取连接字符串,它们将从WinForms中的App.config和ASP.NET中的Web.config读取。您可以在两个配置文件中输入不同的值

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


编辑:如果您不想添加对System.Web.dll的引用,您可以通过反射调用上述内容:首先调用
Type.GetType(“System.Web.HttpContex”)
如果返回
null
,那么您肯定不在ASP.NET中。如果它返回一个值,那么您可以继续获取它的
当前
静态属性。

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

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


编辑:如果您不想添加对System.Web.dll的引用,您可以通过反射调用上述内容:首先调用
Type.GetType(“System.Web.HttpContex”)
如果返回
null
,那么您肯定不在ASP.NET中。如果它返回一个值,那么您可以继续获取它的当前静态属性。

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

推荐的方法是将连接字符串存储在配置文件(App.Config或Web.Config)中,并使用
ConfigurationManager
从中读取。请参阅MSDN。

让数据库代码检测运行它的平台似乎是错误的解决方案。不管你选择什么,似乎总有办法战胜它

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

enum Platform {
  AspNet,
  WinForms
}

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

让数据库代码检测运行它的平台似乎是错误的解决方案。不管你选择什么,似乎总有办法战胜它

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

enum Platform {
  AspNet,
  WinForms
}

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

编写一个公共服务层,使两个winforms应用程序。和ASP.NET“对话”是同一回事吗?写一个公共服务层,让两个winforms应用程序。和ASP.NET“对话”是同一件事吗?我想使用相同的代码来实现这两个目的(更易于维护),并且对System.Web.HttpContext.Current的引用不会在WinForms应用程序中编译。不过,感谢您对配置文件的建议。我们做了一些类似于Evgeny建议的事情,检查system.WEb.HttpContext.Current是否存在于我们的一个自定义dll中,并且效果很好。也许可以分离代码,检查它是否是另一个项目中的web/forms应用程序(并在其中添加system.web Reference?),谢谢您的帮助。对不起,我只能接受一个答案!不过,我想对这两者使用相同的代码(更易于维护),并且不会在WinForms应用程序中编译对System.Web.HttpContext.Current的引用。不过,感谢您对配置文件的建议。我们做了一些类似于Evgeny建议的事情,检查system.WEb.HttpContext.Current是否存在于我们的一个自定义dll中,并且效果很好。也许可以分离代码,检查它是否是另一个项目中的web/forms应用程序(并在其中添加system.web Reference?),谢谢您的帮助。对不起,我只能接受一个答案!我对ASP.NET还很陌生,在什么情况下“我的应用程序的入口点”可以声明平台?我假设它将是针对WinForms的Program.cs。我对ASP.NET非常陌生,在其中声明平台的“应用程序入口点”是什么?我假设它是针对WinForms的Program.cs。谢谢你的建议,我会试试。谢谢你的建议,我会试试。