【发布时间】:2014-08-10 07:55:16
【问题描述】:
我使用 VS 2013 在 TFS 2013 中创建了一个构建。我的解决方案在 Visual Studio 中正确构建,我可以从构建服务器上的放置文件夹中打开解决方案并进行编译。
问题在于触发的构建会随机失败,大约有 60% 的时间会失败,并且缺少参考错误。缺少的引用只是我自己使用该解决方案构建的项目,而不是包或 Microsoft dll。实际缺少的参考错误的数量也各不相同,这让我相信问题与文件访问句柄有关。构建失败并出现标准的“MSBuild 错误 1”。这是一个错误示例:
Helpers\SiteHelpers.cs (11): The type or namespace name 'ShoppingCart' does not exist in the namespace 'xxxxx.xxxxxxxxx.xxxxxxx' (are you missing an assembly reference?)
正如我所说,该项目在 Visual Studio 中构建良好,但我还是检查了对解决方案的依赖关系,一切似乎都是正确的。
可能值得注意的是,我使用的是 TFS 的 Git 实现,所以我的构建过程文件目前是 GitTemplate.12.xaml。该文件适用于我正在研究的其他几个类似的解决方案。
编辑: 我打开了更详细的构建日志,这里是在这种情况下碰巧失败的部分:
53>GenerateTargetFrameworkMonikerAttribute: 跳过目标“GenerateTargetFrameworkMonikerAttribute”,因为所有输出文件相对于输入文件都是最新的。 核心编译: C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /platform:AnyCPU /errorreport:prompt /define:TRACE /highentropyva- /reference:"C :\Builds\5\xxxxGit\xxxx xxxx\bin\BusinessObject.dll" /reference:"C:\Builds\5\xxxxGit\xxxx xxxx\bin\Configuration.dll" /reference:"C:\Builds\5\ xxxxGit\xxxx xxxx\bin\DataProvider.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Microsoft.CSharp.dll" /reference:"C: \Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4. 0\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.DataSetExtensions.dll" /reference:"C:\ Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft \Framework\.NETFramework\v4.0\System.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.dll" /reference: "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.Linq.dll" /reference:"C:\Builds\5\xxxxGit\xxxx xxxx\bin\ Utilities.dll" /debug:pdbonly /filealign:512 /optimize+ /out:obj\Release\ScheduledTransmissionProcessor.exe /target:exe /utf8output Program.cs Properties\AssemblyInfo.cs "C:\Users\xxxxxuser\AppData\Local\ Temp\.NETFramework,Version=v4.0.AssemblyAttributes.cs" 53>Program.cs(6,11): 错误 CS0234: 名称空间 'xxx' 中不存在类型或名称空间名称 'BusinessLogic'(您是否缺少程序集引用?) [C:\Builds\5\xxxxGit\ xxxx xxxx\src\Application\Console\ScheduledTransmissionProcessor\ScheduledTransmissionProcessor.csproj]这是构建成功时的相同部分:
52>GenerateTargetFrameworkMonikerAttribute: 跳过目标“GenerateTargetFrameworkMonikerAttribute”,因为所有输出文件相对于输入文件都是最新的。 核心编译: C:\Program Files (x86)\MSBuild\12.0\bin\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /platform:AnyCPU /errorreport:prompt /define:TRACE /highentropyva- /reference:"C:\ Builds\5\XXXXGit\XXXX XXXX\bin\BusinessLogic.dll" /reference:"C:\Builds\5\XXXXGit\xxxx xxxx\bin\BusinessObject.dll" /reference:"C:\Builds\5\XXXXGit\ xxxx xxxx\bin\Configuration.dll" /reference:"C:\Builds\5\XXXXGit\xxxx xxxx\bin\DataProvider.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework \.NETFramework\v4.0\Microsoft.CSharp.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll" /reference:"C :\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework \v4.0\System.Data.DataSetExtensions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.dll" /refer ence:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\ .NETFramework\v4.0\System.Xml.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.Linq.dll" /reference :"C:\Builds\5\XXXXGit\xxxx xxxx\bin\Utilities.dll" /reference:"C:\Builds\5\XXXXGit\xxxx xxxx\bin\UtilityServices.dll" /debug:pdbonly /filealign:512 /optimize+ /out:obj\Release\ScheduledTransmissionProcessor.exe /target:exe /utf8output Program.cs Properties\AssemblyInfo.cs "C:\Users\xxxxxuser\AppData\Local\Temp\.NETFramework,Version=v4.0.AssemblyAttributes 。CS” 53>核心资源:似乎找不到命名空间,因为引用未包含在 csc.exe 的命令行参数中。
什么会导致构建命令随机错误?它可能是构建机器上的资源吗?构建过程模板中有什么东西?
编辑 2: 以下是在我发布的错误日志中导致构建失败的项目的 .csproj 文件中的项目引用示例:
<ProjectReference Include="..\..\..\BusinessLogic\BusinessLogic.csproj">
<Project>{0C3A2268-388A-4C88-8D4C-982FB00E573D}</Project>
<Name>BusinessLogic</Name>
</ProjectReference>
这个路径在我的机器和构建机器上是相同的,因为两个版本都是从同一个 Git 存储库克隆的。
【问题讨论】:
-
修复 .csproj 文件中的
HintPath属性 -
缺少的参考资料是我自己的项目,它们是解决方案的一部分。它们在 .csproj 文件中显示为 ProjectReference,它们包含相对路径,如下所示:
-
正如我所说,它几乎成功了一半。我也可以打开拉到构建服务器的解决方案源代码,自己在Visual Studio中构建就好了。
-
您应该将构建日志的详细程度设置为“诊断”,这样当案例达到 60% 时,您就可以打开日志并获取详细信息。
-
@Nicodemeus 我已将诊断日志添加到帖子中
标签: git tfs msbuild visual-studio-2013