真。奇怪的。 SHIZ。
当我执行TFS Team Build
(使用Remote Deploy
)时,网页上的某些#if DEBUG
preprocessor directives代码无法调用。当我手动 one-click deploy (remote deploy)
preprocessor directive
代码有效时。当我在本地调试时,代码也可以工作。
所以 - 问题看起来与我的Build Template
的配置设置有关(我认为??)。所以,这就是我所拥有的: -
alt text http://img256.imageshack.us/img256/4070/59603294.png
没什么太难的。那说...... 请善待编译。在'DEBUG'模式下构建我的项目(读取:项目,不是解决方案)。
我的代码如下: -
#if DEBUG
Log.Debug("We are in DEBUG mode.");
#else
Log.Debug("We are _NOT_ in DEBUG mode.");
#endif
因此,当调用此代码(在某些aspx页面中)时,它会打印出“我们处于DEBUG模式”。什么时候
但是,当我让TFS的持续整合开始时,不是。
FML。
我试图查看它是否属于CASING情况(即#if debug
或#if Debug
),但它仍然不起作用。
然后我甚至尝试显式地告诉MSBuild配置....
alt text http://img294.imageshack.us/img294/9970/75495143.png
仍然没有爱。
哦,但是这是个软木塞!我还有一些web.config转换 ...你能猜出哪个文件被转换?如果你猜到了所有场景的web.debug.config,那么获胜者甚至是代码中出错的团队构建!所以它就像构建过程和工作流知道它是DEBUG
配置.. kewl!但编译后的代码不是???
最后,更改debug="true"
或debug="false"
没有任何区别。
在我跳出这栋楼之前,有人可以帮忙吗?当我的生活中不断出现这些奇怪的屁股问题时,它会让我失望。 叹息
请帮忙!
注意:我不能再接受世界上最小的小提琴捐赠 - 我已经获得了很多。干杯:)
答案 0 :(得分:6)
好吧,我找到了答案,但我对此并不满意。我将制作一个关于这个bug的视频并通过电子邮件发送给Vishal @ MS ......看看他的想法:)
无论如何,如果仔细查看默认配置无处不在就是这样......
DEBUG | Any Cpu
alt text http://img202.imageshack.us/img202/9196/70272059.png
那里没什么不寻常的......现在,当我将平台更改为AnyCpu
时(请注意我是如何移除空间的....)现在它可以正常工作。
例如..
alt text http://img19.imageshack.us/img19/2548/45461348.png
是什么让我想到的是当我查看.proj文件时......这里有一个片段......
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
... snip for brevity ...
<SccProvider>SAK</SccProvider>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
... snip for brevity ...
<DesktopBuildPackageLocation />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
... snip for brevity ...
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
所以是的..我修好了但是我不确定这是否可以接受或只是侥幸。我需要从MS团队那里得到一些真实的答案:)
答案 1 :(得分:2)
我可以确认这种行为以及解决方法。看起来VS2010会自动删除空间,或者a)将Platform值保存到解决方案/项目文件中,或者b)在调用MSBuild时将其删除。
无论哪种方式,TFS Build引擎都不遵循这种模式,如果您选择特定的Platform | Configuration值,则必须手动删除空间。
有趣的是,TFS Build Definition对话框允许您只输入配置。它会抱怨然后接受输入。这种方法的优点是Microsoft.Common.targets文件通过默认为“AnyCPU”来优雅地处理空的Platform输入值。