【问题标题】:How do I chase down the cause of this TFS Automated Build Error?如何追查此 TFS 自动构建错误的原因?
【发布时间】:2012-04-02 11:09:09
【问题描述】:

我有一个解决方案,其中包含一个网站项目和几个包含支持类的项目。每个项目都有一个单独的基本功能:配置、数据、身份、业务对象等。当我在 VS2008 中打开解决方案时,它构建完美。它运行、运行、调试和经历没有编译或 JIT 异常。

在 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 文件夹中。

【问题讨论】:

    标签: visual-studio-2008 tfs build-automation tfsbuild


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-07-05
      • 2015-10-20
      • 1970-01-01
      • 2011-11-26
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      相关资源
      最近更新 更多