The test configuration earlier today wasn't the problem. It turned out that MSBuild simply didn't know it had to pull in the System.Web.Providers assembly. Fortunately, this guy suggested a way to do it. I created a new file called AssemblyInit that looks like this:
using System.Diagnostics;
using System.Web.Providers;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace MyApp
{
public class AssemblyInit
{
[AssemblyInitialize]
public void Initialize()
{
Trace.WriteLine("Initializing System.Web.Providers");
var dummy = new DefaultMembershipProvider();
Trace.WriteLine(string.Format("Instantiated {0}", dummy));
}
}
}
That does nothing more than create a hard reference to System.Web.Providers, causing MSBuild to affirmatively import it.
Now all my CI build works, the unit tests work, and I can go have a weekend.