none
CLR Integration in 64bit machine in SQL 2005 with x86 platform target

    Dotaz

  • Hi,

    I have following problem:

    My production problem enviornment is:

    Windows Server 2003 Standard x64 edition with Service Pack 1

    SQL Server 2005 with .Net Framework 2.0 for 64bit machines.

    I have a .Net application that uses assemlies that use COM references, so I have my application compiled with target platform x86 so that it can use COM Interop and can run in WOW64. All of my assemblies are compiled for x86 target platform.

    We are using the same set of assemblies on 32bit machines and SQL server 2005 with 2.0 framework for 32 bit machines.

    Now, I have one of my assemblies target platform x86, being used in SQL server 2005 on 64 bit machines using CLR. The assembly gets installed fine, but when I call the function I get following error on 64 bit machines only. 32 bit machines do not have any problem:

    Msg 10314, Level 16, State 11, Line 1

    An error occurred in the Microsoft .NET Framework while trying to load assembly id 65548. The server may be running out of resources, or the assembly may not be trusted with PERMISSION_SET = EXTERNAL_ACCESS or UNSAFE. Run the query again, or check documentation to see how to solve the assembly trust issues. For more information about this error:

    System.IO.FileLoadException: Could not load file or assembly 'echalk.common, Version=7.0.0.0, Culture=neutral, PublicKeyToken=77f22df29f1a5e39' or one of its dependencies. The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)

    System.IO.FileLoadException:

    at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)

    at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)

    at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)

    at System.Reflection.Assembly.Load(String assemblyString)

    We are using the same exact steps but I get the above error in 64bit machines. I know if I had the asseblies compiled with AnyCPU, it works on both sql servers but then my application fails in 64 bit machines. If I compiled all my assemblies with x86 platform then application works but sql server functions stop working on 64 bit machines. Is there a work arount that I could use so that I don't have to create 2 sets of assemblies for application and sql server seperate.

    Any help would be appreciated. Also thanks in advance.

     

     

     

     

     

    3. srpna 2006 19:34

Všechny reakce