【问题标题】:Is there a directive to detect ASP.NET?是否有检测 ASP.NET 的指令?
【发布时间】:2011-10-27 02:56:48
【问题描述】:

我有一个在 ASP.NET、SQL CLR 和独立应用程序中工作的代码库,并根据某些命名空间(例如 System.Drawing)是否可用提供不同的功能。现在,我手动排除了这些代码,但使用 C# 编译器将是有益的:

  • 我可以更懒一点,
  • 我可以使用同一个库。

我知道我可以使用#if directives 来搜索定义,我可以手动定义类似ASP_NET 的内容,但如果有办法自动执行此操作,那就更好了。

那么,我可以检测 ASP.NET 吗?或者,我可以检测某些引用的程序集是否可用?

【问题讨论】:

  • 为什么要这样做?你当然可以使用来自 ASP.NET 的System.Drawing
  • @svick - 因为微软在MSDN 上特别说明了这一点(请参阅注意部分)。话虽如此,我不知道有谁在这样做时遇到了问题。
  • 我知道我可以在 ASP.NET 中使用System.Drawing。例如,我不能在 SQL CLR 中。

标签: c# asp.net c-preprocessor


【解决方案1】:

如果您需要在编译时执行此操作(如您所说),您可以自己定义预处理器符号。

预处理是一个仅限 C# 的概念。您需要为每个要运行的目标编译一次。预处理器不能用于运行时发生的任何事情。它的结果被烧成二进制文件。

【讨论】:

    【解决方案2】:

    asp.net 没有这样的预定义预处理器指令。

    大多数人所做的是寻找当前的HttpContext - 假设如果它为空,则这不是网络上下文。

    另一种选择是测试 HttpRuntime.AppDomainAppId 是否为空,类似的假设。

    其他类似选项:

    System.Web.Hosting.HostingEnvironment.IsHosted == true
    System.Web.HttpRuntime.Cache != null
    

    您可以检查web.config 文件是否存在。

    【讨论】:

    • WCF 中没有HttpContext,只是说:)
    • 我必须在编译期间执行此操作(或用存根类填充我的代码)以允许它编译,这就是为什么我希望在预处理器中有所作为。 :)
    猜你喜欢
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    相关资源
    最近更新 更多