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

本文关键字:工作 部署 预处理 处理器 | 更新日期: 2023-09-27 18:19:14

我有个小问题。

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

我正在使用web表单。当我在。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的问题。

谢谢!

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

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

条件语句在编译时求值,并且IL不包括"if-def" out的分支。你可以通过使用任何反编译器来验证编译后的DLL中实际包含的内容,例如ILSpy甚至ILDasm(如果你只能使用。net/vs自带的工具)。

请注意,如果您使用条件属性,那么它们将出现在编译代码中,并且使用它们注释的调用方法将根据引用您的DLL的项目进行编译(例如,请参阅Debug.Trace的标记方式)。更多信息请参见#if DEBUG vs. Conditional("DEBUG")