views:

30

answers:

1

I have some code that needs to be able to find the version number of an assembly, given a string saying where it's located.

I can't get this to work:

Assembly assembly = Assembly.LoadFrom("\\Program Files\\Microsoft SQL Server Compact Edition\\v3.5\\sqlcecompact35.dll");

throws a System.IO.IOException: File or assembly name '\Program Files\Microsoft SQL Server Compact Edition\v3.5\sqlcecompact35.dll', or one of its dependencies, was not found.

Yet the file does exist:

FileInfo fileInfo = new FileInfo("\\Program Files\\Microsoft SQL Server Compact Edition\\v3.5\\sqlcecompact35.dll"); 

creates an object where fileInfo.Exists == true.

Should I be passing in a different filename/path to load the SQL CE assembly? Thanks.

+2  A: 

sqlcecompact35.dll is not a managed assembly and therefore cannot be loaded via Reflection. That DLL, along with other files like sqlceqp35.dll, sqlceca35.dll (look in the distribution for all files) are the natie pieces of the data engine. The only managed assembly that you might load this way is System.Data.SqlServerCe.dll.

EDIT

Getting the file version info for a native file is not near as easy in the Compact Framework. I've built and blogged a solution to retrieve this info for you.

ctacke
Ohh - thanks. Can I get the version number programmatically from the file some other way without having to look in the registry?
ger
Brilliant, thanks so much!
ger