Web或console app,如何获取当前DLL的应用上下文
Web or console app, how to get the application context of the current DLL
我有一个通用的 c# 工具 DLL,它既用于控制台库,也用于 Web 应用程序。根据 DLL 是在 Web 应用程序中使用还是在控制台中使用,我需要某些方法以不同方式执行。
有没有办法从给定的方法中确定我们是在 Web 上下文还是控制台应用程序上下文中?我意识到我可以使用配置文件来实现这一点,但在我的情况下,如果我可以在方法中完成它会更好。
您应该参数化此信息并将其传递给您要使用的 class/methods。
您无法(以可靠的方式)确定一个应用程序是 Web 应用程序还是控制台应用程序,因为它们不是相互排斥的。控制台应用程序也可以作为 Web 应用程序运行,以 OWIN 为例。
如果您坚持自动执行,则在可执行程序集中定义并使用属性:
[AttributeUsage(AttributeTargets.Assembly)]
public class AppModelAttribute : Attribute {
public ModelType Model {get;private set} // This one can be an enum type with values Web, Console
public AppModel(ModelType type)
{
this.Model = type;
}
}
在您的执行程序集中添加此程序集:
[assembly: AppModelAttribute(ModelType.Web)]
然后可以查询这个属性,判断执行程序集是Web还是Console:
var attributes = assembly
.GetCustomAttributes(typeof(AppModelAttribute), false)
.Cast<AppModelAttribute>();
以上查询取自here。
编辑:我的意思是控制台应用程序可以作为 Web 服务器启动并作为常规 Web 应用程序运行,例如 HttpServer class 可以用于任何类型的应用程序,它可以让你回答 http 消息(GET、POST 等)。 OWIN 是控制台应用程序作为 Web 应用程序运行的示例。
但是,您可以在 您的上下文 中将 Web 应用程序定义为 IIS 上的应用程序 运行。然后你需要以某种方式分析进程并查看它是否真的由 IIS 托管,但这肯定是矫枉过正。
我有一个通用的 c# 工具 DLL,它既用于控制台库,也用于 Web 应用程序。根据 DLL 是在 Web 应用程序中使用还是在控制台中使用,我需要某些方法以不同方式执行。
有没有办法从给定的方法中确定我们是在 Web 上下文还是控制台应用程序上下文中?我意识到我可以使用配置文件来实现这一点,但在我的情况下,如果我可以在方法中完成它会更好。
您应该参数化此信息并将其传递给您要使用的 class/methods。
您无法(以可靠的方式)确定一个应用程序是 Web 应用程序还是控制台应用程序,因为它们不是相互排斥的。控制台应用程序也可以作为 Web 应用程序运行,以 OWIN 为例。
如果您坚持自动执行,则在可执行程序集中定义并使用属性:
[AttributeUsage(AttributeTargets.Assembly)]
public class AppModelAttribute : Attribute {
public ModelType Model {get;private set} // This one can be an enum type with values Web, Console
public AppModel(ModelType type)
{
this.Model = type;
}
}
在您的执行程序集中添加此程序集:
[assembly: AppModelAttribute(ModelType.Web)]
然后可以查询这个属性,判断执行程序集是Web还是Console:
var attributes = assembly
.GetCustomAttributes(typeof(AppModelAttribute), false)
.Cast<AppModelAttribute>();
以上查询取自here。
编辑:我的意思是控制台应用程序可以作为 Web 服务器启动并作为常规 Web 应用程序运行,例如 HttpServer class 可以用于任何类型的应用程序,它可以让你回答 http 消息(GET、POST 等)。 OWIN 是控制台应用程序作为 Web 应用程序运行的示例。
但是,您可以在 您的上下文 中将 Web 应用程序定义为 IIS 上的应用程序 运行。然后你需要以某种方式分析进程并查看它是否真的由 IIS 托管,但这肯定是矫枉过正。