【发布时间】:2013-08-24 06:18:22
【问题描述】:
我在使用条件编译的标准 WinForms 应用程序中遇到问题
我有 2 个引用同一个 Program.cs 文件的 .csproj(它们也位于磁盘上的同一个文件夹中)
在 Project1.csproj 中,我定义了一个名为 CONDITION_1 的条件编译符号
在 Project2.csproj 中,我定义了一个名为 CONDITION_2 的条件编译符号
static void Main()
{
#if CONDITION_1
DoSomething();
#elif CONDITION_2
DoSomethingElse();
#else
DoAnotherThing();
#endif
ContinueDoingStuff();
}
这些符号定义为“所有配置”的项目设置。 在我的调试环境中,一切正常。但是,当我重新检查源代码并在我的构建机器上构建时,我在反编译器中打开 Project2.exe,我注意到我的源代码是这样的 p>
static void Main()
{
DoAnotherThing();
ContinueDoingStuff();
}
如果我在 Visual Studio 中打开解决方案文件并执行常规构建(不清理、不重建、不更改代码)
我打开 exe 并注意到 Project2.exe 的正确反编译源...
static void Main()
{
DoSomethingElse();
ContinueDoingStuff();
}
有什么想法吗?是否有可能在编译时没有正确设置条件符号?
【问题讨论】:
-
您可能忘记为发布配置设置这些条件。
-
条件设置为“所有配置”。这包括“发布”。但是我仔细检查了 .csproj 并定义了符号。此外,如果没有设置它们,那仍然无法解释简单构建(在发布模式下)创建正确编译的 exe 的行为。
-
你能用一个简单的项目重现这种行为并上传到某个地方让我们看看吗?
-
当我手动检查 .csproj 时,我注意到符号不是为 Release|AnyCPU 定义的,而是为 Release|x86 定义的。所以我猜当你为“所有配置”设置符号时,它也不意味着“所有平台”。很高兴我找到了!
标签: c# visual-studio-2010 conditional-compilation