C# 预处理器在本地工作但在部署时不工作

C# Preprocessor working locally but not when deployed

有一个简短的问题。

我创建了一个新的构建配置并添加了一个名为 "TEST" 的预处理器 directive/symbol 来测试一些东西。

我正在使用网络表单。当我在 .cs

中执行此操作时
var isTestSet = false

#if TEST
        isTestSet = true;
#else
        isTestSet = false;

然后在标记中的 ascx 本身中,我做了一个快速测试:

<% if (isTestSet == true) 
     alert("test is set");
   else
     alert("test is not set");
%>

在我的本地开发环境中,这非常有效。如果我在 TEST 中构建解决方案,它会提醒它已设置。当我在调试模式或发布模式下构建它时,它会提醒它未设置。但是,当我使用我编译的同一个 dll 并将其部署到另一个环境时,它总是显示为 false(似乎从来没有工作过)。

有什么想法吗?预处理器指令是否从构建它们的 DLL 中继承?意思是只要我的 dll 是使用这个添加符号的新配置构建的,那么它就应该被设置,不是吗? 是否需要保留其他任何东西才能使它起作用?我还以为是DLL呢。

谢谢!

您很可能使用了错误的 DLL 副本。

条件语句在编译时求值,IL 不包括 "if-def" 输出的分支。您可以使用任何反编译器(即 ILSpy 或什至 ILDasm)验证编译后的 DLL 中实际包含的内容(如果您只能使用 .Net/VS).

附带的工具

请注意,如果您使用 conditional attributes than they are present in compiled code and calling methods annotated with them will be compiled according to projects that references your DLL (see how Debug.Trace are marked for example). See #if DEBUG vs. Conditional("DEBUG") 了解更多信息。