2010-07-01 65 views
2

真的。奇怪的。 SHIZ。需要一些TFS2010 +自动生成+'配置生成=调试'

当我做了TFS Team Build(带Remote Deploy),一些#if DEBUGpreprocessor 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页面)被调用时,它打印出“我们是在调试模式。”当它的

  • 本地主机(本地主机配置:调试)
  • 手动一键reploy(本地主机配置:调试)远程服务器

但不是当我让TFS的连续一体化踢。

FML。

我试图看看它是否是一个封闭的情况(即#if debug#if Debug),但它仍然无法正常工作。

我那么即使试图明确告诉的MSBuild配置....

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

仍然没有爱情。

哦..但这是软木塞!我ALSO有一定的web.config转换

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

...和U可以猜测哪些文件得到的转换成 ??赢家如果你猜对了的web.debug.config全部场景的......甚至是在代码中出现错误的团队构建!所以这就像构建过程和工作流程知道它是一个DEBUG配置.. kewl!但编译的代码不?

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

在我跳出这座大楼之前,有人能帮忙吗?当我不断地在我的生活中出现这些奇怪的屁股问题时,它会杀死我。 叹息

请帮忙!

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

回答

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

我可以证实此行为以及解决方法。它看起来像VS2010将自动删除空间,当它将a)保存到解决方案/项目文件的平台值,或b)调用MSBuild时将其删除。

无论哪种方式,TFS Build引擎都不遵循此模式,如果您选择特定的Platform | Configuration值,则必须手动删除该空间。

有趣的一面是,TFS构建定义对话框允许您只输入配置。它会抱怨,但接受输入。这种方法的优点是,Microsoft.Common.targets文件通过默认为“AnyCPU”正常处理空的平台输入值。