我有一个可在ASP.NET,SQL CLR和独立应用程序中运行的代码库,并根据某些名称空间(如System.Drawing
)是否可用提供不同的功能。现在,我手动排除这些代码片段,但是将C#编译器放到它上面是有益的:
我知道我可以使用#if
directives来搜索定义,我可以手动定义类似ASP_NET
的内容,但是如果有办法自动执行此操作,那就更大了。
那么,我能检测到ASP.NET吗?或者,我可以检测某些引用的程序集是否可用吗?
答案 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概念。您需要为每个要运行的目标编译一次。预处理器不能用于运行时发生的任何事情。它的结果被刻录成二进制文件。