2012-04-02 22 views
1

我有一个解决方案,其中包含一个网站项目和几个支持类的项目。每个项目都有一个独立的基本功能:配置,数据,身份,业务对象等。当我在VS2008中打开解决方案时,它完美地构建。它运行,运行,调试,并且没有编译或JIT异常。如何追究此TFS自动构建错误的原因?

在TFS 2010中生成自动构建定义后,构建将按顺序运行并编译所有子项目。他们都是针对“调试|混合平台”,因为我阅读的文档试图追查我的错误,这表明这对于网站项目是必需的。我可以在构建日志中看到所有新编译的库和所有第三方库都被复制到\Binaries目录和网站的\bin目录中。然后日志中的下一行是:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe -v /MySolution -p ..\MySolution\ -u -f -d -fixednames D:\TFS\b\308\Binaries\_PublishedWebsites\MySolution\ 
D:\TFS\b\308\Sources\MySolution\SomeFolder\SomePage.aspx.vb(15): error BC30456: 'MyProperty' is not a member of 'Some_UserControl_ForPage'. [D:\TFS\b\308\Sources\Solution Files\MySolution.sln] 
Done Building Project "D:\TFS\b\308\Sources\Solution Files\MySolution.sln" (default targets) -- FAILED. 

Build FAILED. 

"D:\TFS\b\308\Sources\Solution Files\MySolution.sln" (default target) (1) -> 
(MySolution target) -> 
    D:\TFS\b\308\Sources\MySolution\SomeFolder\SomePage.aspx.vb(15): error BC30456: 'MyProperty' is not a member of 'Some_UserControl_ForPage'. [D:\TFS\b\308\Sources\Solution Files\MySolution.sln] 

用户控件的问题属性属于“祖父母”继承。控件本身继承业务对象库中的自定义WebUserControl。该类继承自具有此基本属性的较不具体的WebUserControl。当代码行被注释掉时,错误会发生变化,但这只是构建链中进一步发生的另一个“不可能”错误。

我们有其他网站项目成功地自动构建和部署从这个构建代理2.0+的所有框架。当我更改构建定义(工作区等)的各种属性或调整解决方案本身内的构建配置时,它不会改变行为。构建完成后,所有成功构建的项目都会在构建文件夹中结束。此外,该解决方案还有一个不太复杂的网站项目,它成功构建并最终位于构建文件夹的_PublishedWebsites文件夹中。

回答

1

第一个过程是取消选中设置网站属性的Use fixed naming and single page assemblies。这消除了物理错误。这是一个来自同事的赃物,而不是一个计算出的举动,但我最好的猜测是,出于某种原因,TFS无法解析嵌套引用。虽然这消除了参考错误,但会出现一个新错误,指示用户控件上的模糊命名空间。我们的假设是,由于网站项目不再局限于单个页面程序集,因此可能会生成多个副本(为什么会超出我),这会导致模糊性。

我不完全了解这个解决方案的来龙去脉,但已经阅读了关于this blog article by Aaron Hallberg中的问题,我知道编译器在IDE和编译器中运行时存在差异,因为它在自动构建代理。总结他的回应,IDE自动不会为网站的MSBuild注入-u。但是,由于TFS只考虑解决方案而不考虑网站项目,因此它会查找设置Debug.AspNetCompiler.Updateable。如果此设置已打开,则可能会导致控件上的模糊命名空间。我不明白为什么和阅读他的博客文章没有为我清除任何东西。

取消选中网站属性页面中的Allow this precompiled site to be updated可以使网站正确构建,并且由于它不是预编译网站,因此不会对构建产生任何不利影响。