Cannot load System.Web.Mvc on TeamCity when running MSTest - asp.net-mvc

I'm converting a working Visual Studio 2015 build on TeamCity to Visual Studio 2017, and I'm having an issue when running MSTest. I'm getting the following error message:
System.IO.FileLoadException: Could not load file or assembly 'System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
I searched the entire solution and couldn't find anything explicitly referencing System.Web.Mvc v3.0.0.1. I attempted to add the following assembly redirect in the app.config of the Test project to fix the problem:
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
However, the problem still persists. After debugging, I discovered the error only occurs in code using System.Web.Mvc.UrlHelper. When I comment that code the build works correctly.
The code compiles and tests run correctly when running locally from Visual Studio.
Here's a screenshot of the solution build step in TeamCity:
And a screenshot of the MSTest build step in TeamCity:

Related

Could not load file or assembly System.Runtime.CompilerServices.Unsafe on a clean autofac.mv5 installation

I just installed autofac.Mvc5 6.0 on my .net framework 4.7.2 installation.
And without adding any code other than adding the nuget package I get this error:
Could not load file or assembly
System.Runtime.CompilerServices.Unsafe, Version=4.0.6.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a or one of it's
dependences. The found Assembly's manifest definition does not match
the Assembly reference. (Exception from HRESULT: 0x80131040)
Anyone got any idea?
You probably have another library that uses a different version of System.Runtime.CompilerServices.Unsafe. What's in web.config?
Did you tried bindingRedirect?
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
</dependentAssembly>
If you have a newer version replace it in the newVersion above.

SpecFlow Jenkins Run Failing looking for NewtonSoft v9.0.0.0

I am setting up a new project on Jenkins and I am having a slight issue. The build is successful but when specrun begins, all tests are ignored and it is throwing the below error.
TechTalk.SpecRun.Framework.SpecRunException: At least one test thread aborted. ---> System.IO.FileNotFoundException: Could not load file or assembly 'Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.
My App.config I have added the below to support the new version:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
</dependentAssembly>
I still throw the error. I have uninstalled, re-installed and searched for 9.0.0.0 but nothing. I have 9.0.0.1 in private assemplies as well as an old v6. There are similar posts out there on StackOverflow and other sites but I have not been able to get this to work. I have also tried executing from command line. Any suggestions?
SpecFlow v1.78
MSBuild v3.78
SpecRun.Runner v3.1.44
SpecRun.SpecFlow.3-1-0 v3.144
There was a bug in upgrading to current so I had to rollback.

Could not load file or assembly 'WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.

I have an MVC5 Web api project. I am getting following error after deployment,
Could not load file or assembly 'WebGrease, Version=1.5.1.25624,
Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its
dependencies. The system cannot find the file specified.The located
assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040) File name: 'WebGrease,
Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
In My project I have following references,
System.Web.Mvc - 5.1.0.0
System.Web.Razor - 3.0.0.0
WebGrease - 1.6.5135.21930
Also I have included Following section in my Web.config file,
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
</dependentAssembly>
I have tried with following steps but still not working ,
Uninstall-Package Microsoft.AspNet.Web.Optimization
Uninstall-Package WebGrease
Install-Package Microsoft.AspNet.Web.Optimization
Update-Package WebGrease
I have referred many links on technical blogs but still getting the same error after deployment.
Can any one help me to find the solution?
Thanks
In my case the reason was in folders/configs hierarchy in an application. Try to check that binding redirect is in your root web config.
As an example:
/AppRoot
Web.config1
/Areas/SomeArea
Web.config2
Make sure that you have correct binding redirect in Web.config1.
Hope this helps.

how to use DotNetOpenAuth.Core, Version=4.3.0.0 with vs 2012

i'm using visual studio (2012 or 2013) with asp mvc 4
and it gives me the following error :
Could not load file or assembly 'DotNetOpenAuth.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
i need to use version 4.3.0.0 i installed it using nuget
I know I had problems with the System.Mvc dependency being of the wrong version. Adding the following assembly "rebinding" to your web.config solved the problem (note the version numbers):
<configuration>
<runtime>
<!-- When targeting ASP.NET MVC 3-4, this assemblyBinding makes MVC 1 and 2 references relink
to MVC 3-4 so libraries such as DotNetOpenAuth that compile against MVC 1 will work with it. -->
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Sidenote: I discovered DotNetOpenAuth.Ultimate that bundles everything into one single DLL! It's much much simpler to maintain that the default DotNetOpenAuth and its huge number of packages....

TFS Build 2012, ASP.NET MVC & MSB3247: Found conflicts between different versions of same dependent assembly

I'm getting the MS Build warning "MSB3247: Found conflicts between different versions of the same dependent assembly." when building the a web project (ASP.NET MVC4) under TFS Build 2012.
Consider app.config remapping of assembly "System.Web.Mvc, Culture=neutral, PublicKeyToken=31bf3856ad364e35" from Version "2.0.0.0" [] to Version "4.0.0.0" [XXXX\packages\Microsoft.AspNet.Mvc.4.0.30506.0\lib\net40\System.Web.Mvc.dll] to solve conflict and get rid of warning.
Consider app.config remapping of assembly "WebGrease, Culture=neutral, PublicKeyToken=31bf3856ad364e35" from Version "1.3.0.0" [] to Version "1.5.2.14234" [XXXX\packages\WebGrease.1.5.2\lib\WebGrease.dll] to solve conflict and get rid of warning.
Consider app.config remapping of assembly "Antlr3.Runtime, Culture=neutral, PublicKeyToken=eb42632606e9261f" from Version "3.4.1.9004" [] to Version "3.5.0.2" [XXXX\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll] to solve conflict and get rid of warning.
I know which references are causing these and that's not the problem. I have the relevant binding redirects in place in the web.config file, most of which are set by NuGet when referencing the relevant package(s).
Problem is this is a web project, and it is as if MSBuild is ignoring the binding redirects in the web.config file:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
</dependentAssembly>
</assemblyBinding>
</runtime>
This warning does occur in the local developer build, but not consistently every time.
The interesting thing is that if I add an app.config file to the web project and place the assembly redirects in there (still keeping the original redirects in the web.config file) the warning goes away, both locally and with TFS Build (where it happens consistently.).
WTF? Any ideas?
I have finally managed to isolate the root cause of this error and identify a few red-herrings.
First, it is a red herring that the issue does not occur where Visual Studio 2012 installed or does not happen on the developer workstations. While the issue occurs consistently on the build servers (TFS Build), it happens on the workstations too, provided the steps "Batch Clean All", followed "Build" are followed.
Second, I can now confirm that the culprit for the MSB 3247 warning is the Microsoft BCL Build Nuget Package:
Microsoft.Bcl.Build.1.0.10
It modifies the web application project file, adding the following Import:
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets')" />
<Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
<Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
<Error Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.10\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
</Target>
If I comment it out of the project file, the issue on the local workstations and the TFS Build Servers goes away.
Unfortunately I do not know what the impact of commenting out the above really means. Can I leave it commented out - what will happen?
The reason this Microsoft.Bcl.Build NuGet package is part of the project is because it's marked as a dependency to the Microsoft.Net.Http NuGet package which we do use. Earlier versions of the Microsoft.Net.Http NuGet package did not have this dependency on Microsoft.Bcl and Microsoft.Bcl.Build packages.
Hope this helps someone.
PS: This has a corresponding, but so far unhelpful forum post here: http://social.msdn.microsoft.com/Forums/vstudio/en-US/faa1b607-50bb-48e3-bd5d-76f4fc02ad4c/ms-build-gives-warning-msb3247-found-conflicts-between-different-versions-of-same-dependent?forum=msbuild
I don't have the Bcl.Build stuff anywhere that I can see, and this is the exact error I'm getting on my 2013 TFS build server.
My warnings look like this:
C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets (1635): 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:
Which, I already had in my web.config, minus the culture= param, in both my web and api projects.
I'm sorry I don't have any answer for you, I've just gotten my first build to complete, and these are the last two warnings I'm getting.

Resources