未编译的符号未找到自定义配置

时间:2015-04-11 09:46:28

标签: c# .net

我正在使用VS2010,C#。我有自定义配置名为WCFDebug。我已通过配置管理器添加了此配置。我还在项目中添加了条件编译符号:

enter image description here

问题在于我使用这样的代码:

#if WCFDebug
/*My code here*/
#endif

程序永远不会找到我的配置 - 也没有任何其他配置,如Debug:

#if Debug
/*This one is also not found*/
#endif

我应该怎么做,以便程序找到带有预编译符号的配置?

编辑:

当然,我希望我的程序在运行时模式的调试会话期间找到此配置。

enter image description here

2 个答案:

答案 0 :(得分:0)

在Solution Explorer中,右键单击“Solution ....” - > Configuration Manager - 您可以选择活动配置。

答案 1 :(得分:0)

首先,忘掉我对你问题的最后评论。现在很清楚,您确实在谈论Visual Studio构建配置,而不是可能通过应用程序配置文件提供的配置信息。

但是你谈论的方式" ......我可以找到代码在一个构建配置或另一个构建配置中执行的时间。"确实表明您对Visual Studio构建配置如何工作的理解是非常错误的。

请看一下这个文件: https://msdn.microsoft.com/en-us/library/kkz9kefa.aspx

要认识到的重要一点是构建配置,顾名思义,仅在构建时存在并运行

您选择构建配置然后进行构建,然后根据该构建配置构建生成的.exe或.dll文件,以及那个。特定的.exe或.dll文件是,并且将始终根据它的构建方式运行。谈论"为什么它没有找到我预定义的构建配置"是没有意义的。

您可以根据不同的构建配置构建不同的.exe文件。例如,这是Debug和Release版本的典型特征。但是它们是不同的.exe文件,并且想知道为什么使用Release构建的.exe文件找不到DEBUG条件常量是没有意义的。

接下来我觉得你误解了。 C#预处理指令(如#if)和条件编译符号(如DEBUG和(在您的自定义配置中)WCFDebug)仅在构建时存在

更多信息: https://msdn.microsoft.com/en-us/library/ed8yd1ha.aspx 和这里: https://msdn.microsoft.com/en-us/library/aa691095%28v=vs.71%29.aspx

#if和#endif语句在构建时上作用,以包含或排除它们之间的语句。构建完成后,生成的.exe文件不再知道它们的存在。它要么具有指定的代码,要么它没有,并且对于特定的.exe或.dll文件永远不会改变。

现在,为什么事情没有像你期望的那样发挥作用可能是因为你不明白这些事情究竟是如何起作用的。

如果确实存在与无法解决的问题有关的问题,那么我唯一可以建议您查看所涉及的.csproj文件并检查配置名称和条件符号应该存在。如果您的Visual Studio解决方案有多个项目,那么我认为这可能是一个问题 - .csproj文件并不都正确包含相同的配置信息。

希望这有帮助。