tags:

views:

631

answers:

2

I am trying to dynamicaly compile code using CodeDom. I can load other assemblies, but I cannot load System.Data.Linq.dll. I get an error:

Metadata file 'System.Data.Linq.dll' could not be found

My code looks like:

CompilerParameters compilerParams = new CompilerParameters();
compilerParams.CompilerOptions = "/target:library /optimize";
compilerParams.GenerateExecutable = false;
compilerParams.GenerateInMemory = true;
compilerParams.IncludeDebugInformation = false;
compilerParams.ReferencedAssemblies.Add("mscorlib.dll");
compilerParams.ReferencedAssemblies.Add("System.dll");
compilerParams.ReferencedAssemblies.Add("System.Data.Linq.dll");

Any ideas?

+1  A: 

That may be because this assembly is stored in a different location than mscorlib is. It should work if you provide a full path to the assembly. The most convenient way to get the full path is to let the .NET loader do the work for you. I would try something like this:

compilerParams.ReferencedAssemblies.Add(typeof(DataContext).Assembly.Location);
Curt Hagenlocher
A: 

This may be a silly answer, but are you sure the code is running on a machine with .NET Framework 3.5?

Omer van Kloeten
I'm sure he is. I'm having the exact same error, and I have both .NET 3.5 and .NET 4. :)
lucifer