Why am I getting Could not load file or assembly error on a System.Configuration DLL when using framework 4.0?

topwik picture topwik · Jul 21, 2010 · Viewed 75.5k times · Source

Immediately after we upgraded to visual studio 2010 and the 4.0 framework our trunk build started breaking with the Could not load file or assembly error.

We determined that a 3.5 project couldn't reference a 4.0 project else we'd get this error because, as the error states, This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.

We've since resolved this and the trunk has been building fine.

I recently did a branch and tag, however, and suddenly this error has resurfaced when I try to build the branch; except the error is regarding one of our own .net 4.0 project's reference to System.Configuration DLL.

Towps.Namespace.MyService.csproj in Core.Dev\Towps\Projetcs\Application\MyService:
RG0000: Could not load referenced assembly

"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll".
Caught a BadImageFormatException saying "Could not load file or assembly
'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll' or one of its dependencies.
This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.". in ResGen(0, 0)

I tried setting the specific version property on that system.Configuration DLL ref to true.
I can see in it's properties that the runtime version is v4.0.30319 and the Version is 4.0.0.0.
The path to the DLL ref is C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Configuration.dll which to me looks fine.

The target framework for the csproj file that CrusieControl is using MSBuild to try to build is targeting framework 4.0. Again seems fine.

It builds in the IDE for both trunk & branch. Cruise Control build it in the trunk. The branch build fails when CrusieControl tries to build.

Any ideas what could be happening?

It could be an MSBuild mismatch but I've scanned the config files and msbuild proj files that CruiseControl is using and there are no references to older MSBuilds; which makes sense since all those were updated to get the trunk working.

The branch was simply a copy of the trunk so I'm having difficulty determining what could be the difference!

Answer

topwik picture topwik · Sep 29, 2010

It turns out that after I branched, all the .proj files in my branch build directory that cc.net uses were back to using ToolVerison="3.5". I thought I committed all the ToolsVersion="4.0" proj and config changes to the trunk from which I made the branch; evidentially not.