15

I'm trying to add a .NET 4.0 .dll to the GAC. I am attempting to do this because it is published by a 3rd party company as both a 32 and 64bit .dll which I must use from different apps on different platforms in both formats.

At any rate, I am having trouble registering this dll to the GAC on a Windows Server 2008 environment.

I have tried copying gacutil.exe (and supporting file) found at "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools" on my local machine to the "C:\Windows\Microsoft.NET\Framework\v4.0.30319" folder on the target production server per the suggestions found here.

I then tried copying them to "C:\Windows\Microsoft.NET\Framework64\v4.0.30319".

Running from both locations indicated successful installation. And indeed, the registration appears successful:

  • C:\Windows\Microsoft.NET\assembly\GAC_64\ChilkatDotNet4\v4.0_9.0.8.0__eb5fc1fc52ef09bd\ChilkatDotNet4.dll
  • C:\Windows\Microsoft.NET\assembly\GAC_32\ChilkatDotNet4\v4.0_9.0.8.0__eb5fc1fc52ef09bd\ChilkatDotNet4.dll

However, running a console app that refers to the (64bit) version of the dll errors out with the following message:

System.IO.FileNotFoundException: Could not load file or assembly 'ChilkatDotNet4.dll' or one of its dependencies. The specified module could not be found. File name: 'ChilkatDotNet4.dll'

So, I have now manually created the following GAC entries using mkdir and copy from a command prompt (which may or may not actually work. I have no clue what is so special about gacutil.exe):

  • C:\Windows\Microsoft.NET\assembly\GAC_MSIL\ChilkatDotNet4\v4.0_9.0.8.0__eb5fc1fc52ef09bd\ChilkatDotNet4.dll (using the 64bit version of the dll)
  • C:\Windows\assembly\GAC_64\ChilkatDotNet4\v4.0_9.0.8.0__eb5fc1fc52ef09bd\ChilkatDotNet4.dll
  • C:\Windows\assembly\GAC_32\ChilkatDotNet4\v4.0_9.0.8.0__eb5fc1fc52ef09bd\ChilkatDotNet4.dll

After each "install" of the dll, I tested and received the same error. Any ideas welcome!


EDIT: the GAC issue above may not actually be the culprit. Turns out, even when I create a brand new Console App project and add the .dll directly (so that it lives in the bin), I still can't run it on the sever. Also, I've noted that Console apps are created targeting the .NET 4.0 Client Profile rather than the .NET Framework 4. When I try to run it targeting the client profile, it appears that none of the System.Web* libraries are available. However, I tried running a very simple test app targeting both and neither would run on the server while referencing the bad .dll.

Is there a special kind of install that was to occur to run .NET 4.0 Console Apps?

fordareh
  • 2,923
  • 2
  • 26
  • 39

1 Answers1

36

For anyone else who may have trouble with this in the future. It was not a generalized problem with the way I was registering the dll to the GAC or how I was referring to it from my projects.

ChilkatDotNet4.dll (and the other versions I'm sure) was built in Visual C++. So, the server it is being deployed to has to have the Visual C++ Runtime installed for the appropriate processor architecture.

For 2010 (.NET 4.0):

If you're running an x86 app on a 64-bit platform. Make sure to mark the application pool with "Enable 32-bit applications" = true.

Baris Seker
  • 173
  • 1
  • 2
  • 11
fordareh
  • 2,923
  • 2
  • 26
  • 39
  • 2
    Thanks for the answer. I was using chillkatDotNet4.dll 64bit on Windows 2008 R2 x64 like Frangiskos. I installed Visual C++ Runtimes x64 first. I checked the website but saw the same error again. I changed the x64 dll of Chilkat with x86 and also installed x86 version of Visual C++ Runtimes. And set the Application Pools "Enable 32-bit Applications" property to True. Then everything worked perfect. – CemilF Feb 20 '11 at 05:47
  • 1
    My case was very similar with you guys: I used x86 Chilkat lib, Published to Any CPU. My servers was x64 but installing C++ x86 and enabling 'Enable 32-bit applications' did the trick! – Cristian Boariu Jul 06 '12 at 21:39