Code analysis error CA0055 with a project upgraded to .NET Framework 4.5
I have a Visual Studio solution that was upgraded to use .NET Framework 4.5. It was working fine until I started getting the following error(s) running Code Analysis as part of the build:
CA0052 : No targets were selected
CA0055 : Could not load D:\dev\MySolution\MyProject\bin\Release\MyProject.exe. The following error was encountered while reading module 'System.Xml': Could not resolve type reference: [mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]System.Runtime.CompilerServices.IAsyncStateMachine
That seemed odd, as I confirmed that the application did have an assembly reference to System.Xml. I even tried re-adding the reference but that made no difference. The interesting thing is that the type (IAsyncStateMachine) is new in .NET 4.5, even though it is included in mscorlib Version 4.0.0.0. That's because 4.5 is an in-place upgrade.
I did notice that you do get separate copies of the reference assemblies located in C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework
. Reflecting on the mscorlib.dll assembly in the v4.0 folder showed it did NOT have IAsyncStateMachine
, but the one in the v4.5 folder did. Could that be relevant?
Opening up the .csproj file, I discovered that another assembly reference suspiciously had the following HintPath defined
<Reference Include="System.Web">
<HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.dll</HintPath>
</Reference>
Re-adding this reference, resulted in Visual Studio changing it to just this:
<Reference Include="System.Web" />
And then re-building the solution with Code Analysis enabled was successful.
Categories: .NET