Dathan
Dathan

Reputation: 7446

Could not load file or assembly

I'm working on a system to use a SqlServerCe with NHibernate. From my driver program, if I add the System.Data.SqlServerCe assembly as a reference, I can create and run queries against a database just fine. When trying to use NHibernate, though, I get the following exception:

A first chance exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll Additional information: Could not load file or assembly 'System.Data.SqlServerCe' or one of its dependencies. The system cannot find the file specified.

I've traced the exception to a call to Assembly.Load("System.Data.SqlServerCe"), which seems like it should work. The System.Data.SqlServerCe assembly is in the GAC (I've also tried to add it as a local reference with CopyLocal=true, to no avail), and I can use its members fine, so why can't I explicitly load it? When I open the assembly in Reflector, it has trouble loading the System.Transactions reference (I've also tried adding it as a local reference, again to no avail), so loading that assembly might be the problem, rather than the System.Data.SqlServerCe assembly.

Is this a common problem? System misconfiguration, maybe?

Upvotes: 11

Views: 35712

Answers (3)

rob
rob

Reputation: 37644

This is most probably connected to some system (mis)configuration.

However, by design SQL Server CE is just a single DLL, which may be shipped together with your product.
This means that you can just set Copy local to True in the reference properties of System.Data.SqlServerCe, and you are done.

Upvotes: 2

Sachin
Sachin

Reputation: 18747

I had a similar problem. The mistake I was doing was I was trying to execute the .exe present in the ../obj/x86/Release, whereas I am supposed to execute the .exe present in ../bin/Release. (I am absolute newbie to C#).

(I also noticed that in this ../bin/Release directory , the referenced .dll file is copied locally.)

Upvotes: 1

Dathan
Dathan

Reputation: 7446

Apparently this can be solved by adding a <qualifyAssembly> element to the app.config file. Adding the following has my app running smoothly:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <qualifyAssembly partialName="System.Data.SqlServerCe" fullName="System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </assemblyBinding>
</runtime>

Thanks!

Upvotes: 8

Related Questions