C# Microsoft.TeamTest.targets中的MSBuild NullReferenceException

C# Microsoft.TeamTest.targets中的MSBuild NullReferenceException,c#,msbuild,windows-server-2008-r2,C#,Msbuild,Windows Server 2008 R2,在TFS2010上,我配置了一些运行MSTest单元测试的CI构建。这很好,除了一个解决方案,我通常(但不总是)会遇到以下生成(非测试运行程序)错误: C:\程序文件 (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamTest\Microsoft.TeamTest.targets (14) :对象引用未设置为对象的实例 生成定义的日志详细性设置为诊断。建议这样做,以消除这个非常偶然的错误。如果它是偶然的,顺便说一句,我们可以通过安排另一个构建来解决它,

在TFS2010上,我配置了一些运行MSTest单元测试的CI构建。这很好,除了一个解决方案,我通常(但不总是)会遇到以下生成(非测试运行程序)错误:

C:\程序文件 (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamTest\Microsoft.TeamTest.targets (14) :对象引用未设置为对象的实例

生成定义的
日志详细性
设置为
诊断
。建议这样做,以消除这个非常偶然的错误。如果它是偶然的,顺便说一句,我们可以通过安排另一个构建来解决它,如果它因为上述原因而中断。然而,它不是,而且也需要相当多的时间来构建

即使这是一个生成错误,也可以通过将
禁用测试设置为
True
来修复。但是,我确实想运行测试。有人知道怎么解决这个问题吗?其他(工作)解决方案通常是
所有项目的子集<代码>所有项目
是一个相当大的解决方案

我这里有缩短的MSBuild输出,以防有帮助:

Run MSBuild for Project
Initial Property Values
AdditionalVCOverrides =
CommandLineArguments = /p:SkipInvalidConfigurations=true
Configuration = Release
GenerateVSPropsFile = True
LogFile =
LogFileDropLocation =
MaxProcesses = 1
OutDir = All Projects-CI\Binaries\Release
Platform = Any CPU
Project = All Projects-CI\Sources\Shared\All Projects.sln
ResponseFile =
RunCodeAnalysis = AsConfigured
Targets =
TargetsNotLogged = String[] Array
ToolPath =
ToolPlatform = Auto
Verbosity = Diagnostic
Built $/.../DataAccessLayer.Testing.csproj for default targets.

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamTest\Microsoft.TeamTest.targets (14): Object reference not set to an instance of an object.

MSBuild\Microsoft\VisualStudio\v10.0\TeamTest\Microsoft.TeamTest.targets中的BuildShadowTask自定义任务导致错误。禁用测试时未看到错误的原因禁用测试时不会运行此生成任务

建议添加MsBuild消息任务以输出各种值,以确定哪个值导致“对象引用未设置为对象实例”错误

在这一行之前:

  <BuildShadowTask
        ExecuteAsTool="False"
        CurrentResolvedReferences="@(ReferencePath)"
        CurrentCopyLocalFiles="@(ReferenceCopyLocalPaths)"
        Shadows="@(Shadow)"
        ProjectPath="$(ProjectDir)"
        IntermediatePath="$(IntermediateOutputPath)"
        SignAssembly="$(SignAssembly)"
        KeyFile="$(AssemblyOriginatorKeyFile)"
        DelaySign="$(DelaySign)">

添加消息任务以输出传递给BuildShadowTask的每个参数的值,以确定哪个参数出错:

  <Message Text="AssemblyOriginatorKeyFile $(AssemblyOriginatorKeyFile)" Importance="High" />

您提到的解决方案中是否有专用访问器?一切似乎都暗示这个错误消息与访问私有访问器有关,所以如果不需要它们,您可以删除它们。或者尝试再生它们