是否有检测ASP.NET的指令?

时间:2011-08-15 07:51:11

标签: c# asp.net c-preprocessor

我有一个可在ASP.NET,SQL CLR和独立应用程序中运行的代码库,并根据某些名称空间(如System.Drawing)是否可用提供不同的功能。现在,我手动排除这些代码片段,但是将C#编译器放到它上面是有益的:

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

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

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

2 个答案:

答案 0 :(得分:9)

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

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

另一种选择是将HttpRuntime.AppDomainAppId测试为null,以类似的假设。

其他类似选项:

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

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

答案 1 :(得分:0)

如果你需要在编译时这样做(如你所说),你可以自己定义预处理器符号。

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