【问题标题】:MSBuild fails with missing references sometimesMSBuild 有时会因缺少引用而失败
【发布时间】: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


【解决方案1】:

我的解决方案中有几个项目使用不同的目标框架构建,每个项目都引用了相同的库 (Newtonsoft.Json)。有了依赖项,基本设置是这样的:

项目 A(目标框架 .net 4.5)引用了项目 B。

项目 A 引用了项目 C(目标框架 .net 4.5)。

项目 B(目标框架 .net 4.0)引用了项目 C(目标框架 .net 4.0)。

我收到警告,但 Visual Studio 构建了解决方案。 MSBuild 会随机失败,仅在失败时显示警告。我不知道为什么会有随机元素,但解决方法是确保我的解决方案中的每个库都被相同的目标框架引用。这包括更新 packages.config 和 .csproj 文件以指向相同的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多