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的问题。
谢谢!
很可能您使用了错误的DLL副本。
条件语句在编译时求值,并且IL不包括"if-def" out的分支。你可以通过使用任何反编译器来验证编译后的DLL中实际包含的内容,例如ILSpy甚至ILDasm(如果你只能使用。net/vs自带的工具)。
请注意,如果您使用条件属性,那么它们将出现在编译代码中,并且使用它们注释的调用方法将根据引用您的DLL的项目进行编译(例如,请参阅Debug.Trace
的标记方式)。更多信息请参见#if DEBUG vs. Conditional("DEBUG")