When I began using Microsoft Fakes, I was excited to start shimming some .NET methods. I was lead to believe that I would be able to shim ANY .NET method, static or not: http://
I also had the same problem.
My System.fakes and mscorlib.fakes looked like this :
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="mscorlib" Version="4.0.0.0"/>
<ShimGeneration>
<Add Namespace="System.ComponentModel.BackgroundWorker"/>
</ShimGeneration>
</Fakes>
and
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="System" Version="4.0.0.0"/>
<ShimGeneration>
<Add Namespace="System.ComponentModel.BackgroundWorker"/>
</ShimGeneration>
</Fakes>
System.fakes
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="System" Version="4.0.0.0"/>
<ShimGeneration>
<Add FullName="System.ComponentModel.BackgroundWorker!"/>
</ShimGeneration>
</Fakes>
mscorlib.fakes
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="mscorlib" Version="4.0.0.0"/>
<ShimGeneration>
<Add FullName="System.ComponentModel.BackgroundWorker!"/>
</ShimGeneration>
</Fakes>
and after saving the files I Rebuild the solution. And now I have ShimBackgroundWorker.
Got it working with help from this blog post and here.
The solution was to add the classes I wanted to shim explicitly in the System.fakes file. This is what mine looks like now:
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="System" Version="4.0.0.0"/>
<ShimGeneration>
<Clear/>
<Add FullName="System.Net.Sockets.TcpClient"/>
<Remove Obsolete="1"/>
</ShimGeneration>
</Fakes>
The Remove Obsolete="1"
is to stop errors from being thrown by the Shim generation code when it attempts to shim [Obsolete] code.