需要一些TFS2010的帮助+一个自动Build +'配置来构建=调试'

时间:2010-07-01 08:53:04

标签: asp.net debugging tfs2010 preprocessor

真。奇怪的。 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模式”。什么时候

  • Localhost(Localhost配置:调试)
  • 手动的远程服务器一键式重新部署(Localhost配置:调试)

但是,当我让TFS的持续整合开始时,不是。

FML。

我试图查看它是否属于CASING情况(即#if debug#if Debug),但它仍然不起作用。

然后我甚至尝试显式地告诉MSBuild配置....

alt text http://img294.imageshack.us/img294/9970/75495143.png

仍然没有爱。

哦,但是这是个软木塞!我有一些web.config转换

  • 的web.config
  • web.debug.config
  • web.release.config

...你能猜出哪个文件被转换?如果你猜到了所有场景的web.debug.config,那么获胜者甚至是代码中出错的团队构建!所以它就像构建过程和工作流知道它是DEBUG配置.. kewl!但编译后的代码不是???

最后,更改debug="true"debug="false"没有任何区别。

在我跳出这栋楼之前,有人可以帮忙吗?当我的生活中不断出现这些奇怪的屁股问题时,它会让我失望。 叹息

请帮忙!

注意:我不能再接受世界上最小的小提琴捐赠 - 我已经获得了很多。干杯:)

2 个答案:

答案 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输入值。