Search code examples
visual-studio-2015msbuildcontinuous-integrationbuild-server

VS2015/TFS2013 build server problems


TFS2013 update 5, with VS2015 Enterprise update 3 on the dev PC and also the build server (per What is required for doing Unit Tests on a Build Server?).

Project is a standard MVC5 framework with next to no modifications made as of yet. The project compiles but there are 2 major issues.

The first issue:

C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets (1697): Found conflicts between different versions of the same dependent assembly. In Visual Studio, double-click this warning (or select it and press Enter) to fix the conflicts; otherwise, add the following binding redirects to the "runtime" node in the application configuration file: 

This is followed by a series of proposed xml edits for the <runtime> node like this one:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" culture="neutral" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
    </dependentAssembly>
</assemblyBinding>

The other 3 suggestions aren't repeated here because they're basically the same thing. They address respectively Microsoft.Owin, WebGrease and Newtonsoft.Json. But this is confusing because when I check the <runtime> node in web.config, the precise xml elements recommended in the warning message are already in web.config for all 4 items. Plus, the warning speaks about double-clicking or selecting it, but I can do neither.

The second issue:

TF900547: The directory containing the assemblies for the Visual Studio Test Runner is not valid 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow'.

I checked on the build server the location specified, and sure enough the folder tree requested doesn't exist, the tree stops at (x86)\Microsoft Visual Studio 12.0\Common7\IDE\. I checked under (x86)\Microsoft Visual Studio 14.0 and (x86)\Microsoft Visual Studio 14.0\Common7\IDE\\CommonExtensions\Microsoft\TestWindow exists and there's a significant installation present in this entire location.

I also looked at VS2015 build with TFS2013 which suggests a specific MSBuild parameter. Given the path issues above, it seems to make sense, but before I try it, I wanted to get confirmation it makes sense for my set of issues and that the particular parameter would be correct. Plus, would that MSBuild parameter address the conflicts mentioned in the first issue?

Finally, in researching all this, I began to see how massive the build server configuration can be. It's a little intimidating. I would appreciate references or books that I could begin to study to become better educated for this process.

Update: Following the simple MSBuild argument /tv:14.0 from TFS 2013 building .NET 4.6 / C# 6.0, the first issue was resolved. The build now finds the proper assemblies.

Still looking to solve the 2nd issue regarding Test Runner, but some of the posts I'm reading are suggesting this particular VS/TFS combo is unusual. It may be that both VS2015 and VS2013 are required on the build server, VS2013 being required for the testing. Will report back.


Solution

  • The solution for the second issue is installing Visual Studio 2013 or the Agents for Microsoft Visual Studio 2013 if you want to continue to use the Visual Studio Test Runner.

    Cause there is no way to set the tool version or tool path for "Run VS Test Runner" activity, installing VS 2013 should be the only way to get rid of this error.


    This is due to Test Agent 2015 no longer needed a Test Controller, as the agent orchestration now is managed by the server (TFS2015 or VSTS).

    If you need your test agent or test controller to work with TFS 2013, use Agents for Microsoft Visual Studio 2013 Update 5 and configure the test controller.

    More details please take a look at this tutorial: Install and configure test agents

    As for the build sever configuration, you'd better make sure the build agent(build server) environment the same as your local environment, this will highly reduce tfs build issues.