Question

I have a strong-named assembly containing Model classes that can be shared among several applications (WCF Services in IIS) hosted on the same machine.

Instead of each service having their own copy of this DLL in Bin folder, I want to add it to GAC.

I am using a gacutil.exe for .NET4: Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.1 Copyright (c) Microsoft Corporation. All rights reserved.

The DLL is registered in GAC, but ends up in C:\Windows\Assembly (GAC 2.0) - not in C:\Windows\Microsoft.NET\Assembly (GAC 4).

When I register the DLL in GAC and remove it from Bin folder, my applications fail with:

Could not load file or assembly 'MyCompany.Enterprise.BOM' or one of its dependencies. The system cannot find the file specified. at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)...

Note: Server 2008 R2 is 64-bit, assembly is built for MSIL, .NET 4.0. I am using gacutil.exe which comes with Windows SDK v7.1 and is in NETFX 4.0 Tools folder.

What can I be missing? I can't think of any alternatives so any ideas are welcome.

EDIT (Manifest):

// Metadata version: v2.0.50727
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0
}
.assembly extern System.Runtime.Serialization
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 3:0:0:0
}
.assembly HCS.Enterprise.BOM
{
  .custom instance void [mscorlib]System.Runtime.InteropServices.GuidAttribute::.ctor(string) = ( 01 00 24 63 31 34 64 39 31 65 32 2D 30 35 31 65   // ..$c14d91e2-051e
                                                                                                  2D 34 66 65 31 2D 38 62 37 30 2D 61 36 36 33 66   // -4fe1-8b70-a663f
                                                                                                  39 61 37 62 34 33 35 00 00 )                      // 9a7b435..
  .custom instance void [mscorlib]System.Reflection.AssemblyKeyFileAttribute::.ctor(string) = ( 01 00 20 43 3A 5C 48 43 53 2E 45 6E 74 65 72 70   // .. C:\HCS.Enterp
                                                                                                72 69 73 65 5C 4B 65 79 5C 48 43 53 4B 65 79 2E   // rise\Key\HCSKey.
                                                                                                73 6E 6B 00 00 )                                  // snk..

  // --- The following custom attribute is added automatically, do not uncomment -------
  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) 

  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
                                                                                                             63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 )       // ceptionThrows.
  .custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = ( 01 00 07 31 2E 30 2E 30 2E 30 00 00 )             // ...1.0.0.0..
  .custom instance void [mscorlib]System.Reflection.AssemblyTitleAttribute::.ctor(string) = ( 01 00 12 48 43 53 2E 45 6E 74 65 72 70 72 69 73   // ...HCS.Enterpris
                                                                                              65 2E 42 4F 4D 00 00 )                            // e.BOM..
  .custom instance void [mscorlib]System.Reflection.AssemblyDescriptionAttribute::.ctor(string) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Reflection.AssemblyConfigurationAttribute::.ctor(string) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Reflection.AssemblyCompanyAttribute::.ctor(string) = ( 01 00 0E 48 6F 72 69 7A 6F 6E 2D 42 43 42 53 4E   // ...HN
                                                                                                4A 00 00 )                                        // J..
  .custom instance void [mscorlib]System.Reflection.AssemblyProductAttribute::.ctor(string) = ( 01 00 12 48 43 53 2E 45 6E 74 65 72 70 72 69 73   // ...HCS.Enterpris
                                                                                                65 2E 42 4F 4D 00 00 )                            // e.BOM..
  .custom instance void [mscorlib]System.Reflection.AssemblyCopyrightAttribute::.ctor(string) = ( 01 00 20 43 6F 70 79 72 69 67 68 74 20 C2 A9 20   // .. Copyright .. 
                                                                                                  48 6F 72 69 7A 6F 6E 2D 42 43 42 53 4E 4A 20 32   // H2
                                                                                                  30 31 30 00 00 )                                  // 010..
  .custom instance void [mscorlib]System.Reflection.AssemblyTrademarkAttribute::.ctor(string) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = ( 01 00 00 00 00 ) 
  .publickey = (00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00   // .$..............
                00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00   // .$..RSA1........
                3B 65 DD 3B C7 49 A7 F4 C9 50 BE 27 F9 62 B6 54   // ;e.;.I...P.'.b.T
                D1 26 7B DC 5B EF C1 02 59 E8 77 D4 3D F5 2F 50   // .&{.[...Y.w.=./P
                94 22 AC C3 B7 07 71 A4 99 D4 FF 10 ED 05 6D 70   // ."....q.......mp
                9A 9D 99 DC 33 1F 8A 3F A5 77 2E C5 5F 9D 35 15   // ....3..?.w.._.5.
                BA 54 47 47 C2 8B 13 8C 57 57 C6 1E F5 AB 7B D5   // .TGG....WW....{.
                B8 87 DD 4A F3 69 01 B2 6B C8 88 99 04 09 19 FC   // ...J.i..k.......
                5E 51 7E 2A B9 B5 03 80 C9 A3 EA ED EF B8 EC BF   // ^Q~*............
                EB 97 30 EC D9 E4 36 7C 0F 64 B7 27 9D 29 0D C5 ) // ..0...6|.d.'.)..
  .hash algorithm 0x00008004
  .ver 1:0:0:0
}
.module HCS.Enterprise.BOM.dll
// MVID: {D4D8B566-6B0D-4F8D-ABD4-C3A1339B4F84}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00000009    //  ILONLY
// Image base: 0x031B0000
Was it helpful?

Solution

As can be seen from the manifest, the Dll is a runtime 2.0 version, so even the gacutil of 4.0 will place it in the 2.0 GAC.

The manifest is created at compile time, so there must be something wrong with your project and/or compilation settings.

I assume you use Visual Studio, so check out the projects (not solutions) settings in the Application tab.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top