Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / Languages / C# / December 2007

Tip: Looking for answers? Try searching our database.

Own assembly fails to load when vs2008 is not installed on target machine

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Joe Withawk - 30 Dec 2007 22:21 GMT
I have a solution consisting of a c# project as win application and a c++
project as classlibrary. Both are .net 2.0
The classlibrary handles some loading of quicktime movies, but that should
not be relevant.

On my development machine I build the exe and dll and run the exe which has
a reference to the dll. At some point it uses featured in the dll.
This works fine.
Then I copy my exe and dll to the target system and when the featured in the
dll are called, and it is loaded, it fails with a
system.io.fileloadexecption and a detailed message "the assembly with this
name and that culture and this build number or one of its dependencies,
failed to load."
If I try with code such as Assembly.LoadFrom(the fileName of the dll) I get
the same error.

After making sure that the dll did not mis any dependencies on quicktime or
anything else which I use, I give up and want to debug it on the target
system. I install vs2008 and now the program suddenly works fine. I did not
rebuild. I simply installed vs2008 and now the assembly loads without any
problems.
Rather than being happy, I am concerned since I can obviously not begin
distributing vs2008 along with my application. That is why I come running
here for help. What on earth have I been doing wrong?

I might add that the assembly was created through the new project wizard
where I selected a c++ classlibrary. When looking at properties, it has
three dependencies to system, system.data and system.xml and they were all
in the windows folder, where they should be, on the target machine before
installing vs2008.

ANY pointers will be greatly appresiated since I am completely stumped by
now.
Joe Withawk - 31 Dec 2007 08:56 GMT
I made an extremely small test now. A windows forms project .net 2.0 which
tries to load a c++ class library. It works on systems with vs2008, but it
does not work on systems without it. Source and binaries at
www.greenleaf.dk/error.zip .
I must be missing some important point when it comes to using class
libraries.

The loader is just a form with a button which does this
Assembly a=Assembly.LoadFrom("DummyLibrary.dll");

MessageBox.Show(a.FullName);

The classlib is just a new project/other laguages/c++/classlibrary with this
code in the single h file

// DummyLibrary.h

#pragma once

using namespace System;

namespace DummyLibrary {

public ref class Class1
{
 // TODO: Add your methods for this class here.
public:
 int Add(int a, int b)
 {
  return a+b;
 }

};
}

As I said previoucly. This loads fine n my development machine, but not
else. If I install vs2008 on the other system then the same binaries
suddenly work. It seems that vs installs something which makes this work.
Has it to do with security or something like that? Note that it is not a
problem with absolute vs relative paths. I tried both.

The two micro projects are in this zip www.greenleaf.dk/error.zip It is not
one solution, but two seperate projects to make it even more dead simple.
Alberto Poblacion - 31 Dec 2007 11:30 GMT
> [...]
> system.io.fileloadexecption and a detailed message "the assembly with this
> name and that culture and this build number or one of its dependencies,
> failed to load."

  Try running FUSLOGVW.EXE (which comes with the .Net SDK, I think). This
is the Fusion Log Viewer. It can start the capture of a log of the DLLs that
your program is trying to load, and display all kinds of details about the
version of those libraries and where it is looking for them. This should
give you a good clue about what exactly it is looking for and not finding in
those machines.
Joe Withawk - 31 Dec 2007 13:52 GMT
>   Try running FUSLOGVW.EXE (which comes with the .Net SDK, I think). This
> is the Fusion Log Viewer. It can start the capture of a log of the DLLs
> that your program is trying to load, and display all kinds of details
> about the version of those libraries and where it is looking for them.
> This should give you a good clue about what exactly it is looking for and
> not finding in those machines.

I tried the utility and see the errors, but they make little sence to me.
They seem to deal with for example system.windows.forms.resources not being
there. I appended two of the errors below. Do I understand it correctly as
resources not being in the libraries such as system.windows.forms, but they
exist in the dlls of the framework on the development machine? Why? I
originally had .net 2.0 installed and then installed 3.0 to see if that
changed anything.

Again... In the test (second post zip) I just make an unmanaged classlib in
c++ and try to load it. When vs2008 is installed, it works. When it is not
installed, it fails.

*** Assembly Binder Log Entry  (31-12-2007 @ 14:38:37) ***

The operation failed.
Bind result: hr = 0x80070002. Den angivne fil blev ikke fundet.

Assembly manager loaded from:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable  E:\test\dummylibtest.exe
--- A detailed error log follows.

=== Pre-bind state information ===
LOG: User = DS1\User
LOG: DisplayName = System.Windows.Forms.resources, Version=2.0.0.0,
Culture=da-DK, PublicKeyToken=b77a5c561934e089
(Fully-specified)
LOG: Appbase = file:///E:/test/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
Calling assembly : System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089.
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using machine configuration file from
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: System.Windows.Forms.resources, Version=2.0.0.0,
Culture=da-DK, PublicKeyToken=b77a5c561934e089
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL
file:///E:/test/da-DK/System.Windows.Forms.resources.DLL.
LOG: Attempting download of new URL
file:///E:/test/da-DK/System.Windows.Forms.resources/System.Windows.Forms.resources.DLL.
LOG: Attempting download of new URL
file:///E:/test/da-DK/System.Windows.Forms.resources.EXE.
LOG: Attempting download of new URL
file:///E:/test/da-DK/System.Windows.Forms.resources/System.Windows.Forms.resources.EXE.
LOG: All probing URLs attempted and failed.

---

*** Assembly Binder Log Entry  (31-12-2007 @ 14:49:52) ***

The operation failed.
Bind result: hr = 0x80070002. Den angivne fil blev ikke fundet.

Assembly manager loaded from:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable  E:\test\dummylibtest.exe
--- A detailed error log follows.

=== Pre-bind state information ===
LOG: User = DS1\User
LOG: DisplayName = mscorlib.resources, Version=2.0.0.0, Culture=da,
PublicKeyToken=b77a5c561934e089
(Fully-specified)
LOG: Appbase = file:///E:/test/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using machine configuration file from
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: mscorlib.resources, Version=2.0.0.0, Culture=da,
PublicKeyToken=b77a5c561934e089
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL
file:///E:/test/da/mscorlib.resources.DLL.
LOG: Attempting download of new URL
file:///E:/test/da/mscorlib.resources/mscorlib.resources.DLL.
LOG: Attempting download of new URL
file:///E:/test/da/mscorlib.resources.EXE.
LOG: Attempting download of new URL
file:///E:/test/da/mscorlib.resources/mscorlib.resources.EXE.
LOG: All probing URLs attempted and failed.
John Duval - 31 Dec 2007 14:29 GMT
> >   Try running FUSLOGVW.EXE (which comes with the .Net SDK, I think). This
> > is the Fusion Log Viewer. It can start the capture of a log of the DLLs
[quoted text clipped - 95 lines]
> file:///E:/test/da/mscorlib.resources/mscorlib.resources.EXE.
> LOG: All probing URLs attempted and failed.

Hi Joe,
The error 0x80070002 is a "file not found" error.  Is it possible that
you've built your C++ DLL as debug?  It's possible that you're linked
to the debug version of some runtime files.  Just a guess.

As a next step in debugging, does DEPENDS.EXE show any missing files
on the target machine?  Also, what if you cut out .NET from the
equation completely?  Can you write a simple C++ console app that
attempts to load the C++ DLL?

John
Joe Withawk - 31 Dec 2007 15:29 GMT
>The error 0x80070002 is a "file not found" error.  Is it possible that
>you've built your C++ DLL as debug?  It's possible that you're linked
>to the debug version of some runtime files.  Just a guess.

It was debug. Now I tested with release and it was the same problem.

>As a next step in debugging, does DEPENDS.EXE show any missing files
>on the target machine?

When I run depends on the dll it gives an error
"Error: At least one required implicit or forwarded dependency was not
found.
Error: The Side-by-Side configuration information in
"e:\test\DUMMYLIBRARY.DLL" contains errors. Dette program kunne ikke starte
p grund af en forkert programkonfiguration. Du kan muligvis lse problemet
ved at installere programmet igen (14001).
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing
export function in a delay-load dependent module."

The second error message is what I get when trying to load the assembly
runtime.
There are a lot of dependencies where three are missing with file not found.
They are
MSVCM90.DLL
MSVCR90.DLL
MSJAVA.DLL

It seems that a c++ application built with vs2008 for .net 2.0 will not run
on a system with just .net 2.0 installed??
The two first files exist on the system where the assembly will load. They
do not exist on the system where it will not load. Further more, the
datetime on the files match with the time when I installed vs2008. BUT... if
I copy the two files from system to system and download the msjava.dll (does
not exist on dev system) the dependency walker still reports error, but
nothing is missing. The loading of the assembly fails as before, but now
there are apparently no dependencis missing...

>Also, what if you cut out .NET from the
>equation completely?  Can you write a simple C++ console app that
>attempts to load the C++ DLL?

Is a classlibrary not .net? Is it just an ordinary dll with support for
classes?
I will try that, though I wiill not know what to conclude it it works or if
it does not work.? Thanks for the hints btw. I did not know the dependency
walker util
Joe Withawk - 31 Dec 2007 15:33 GMT
> the dependency walker still reports error, but nothing is missing.

Forgot to tell what the error was. It was
"Error: The Side-by-Side configuration information in "c:\documents and
settings\user\skrivebord\DUMMYLIBRARY.DLL" contains errors. Dette program
kunne ikke starte p grund af en forkert programkonfiguration. Du kan
muligvis lse problemet ved at installere programmet igen (14001).
Warning: At least one module has an unresolved import due to a missing
export function in a delay-load dependent module."
John Duval - 31 Dec 2007 16:01 GMT
> There are a lot of dependencies where three are missing with file not found.
> They are
> MSVCM90.DLL
> MSVCR90.DLL
> MSJAVA.DLL

Looks like depends found that some of the runtime files are missing --
sounds like Willy got your answer for you.

> Is a classlibrary not .net? Is it just an ordinary dll with support for
> classes?
> I will try that, though I wiill not know what to conclude it it works or if
> it does not work.? Thanks for the hints btw. I did not know the dependency
> walker util

Sorry, I (incorrectly) assumed that your C++ library was not .NET.
Sounds like it is, so never mind.  Glad you're up and running.
Willy Denoyette [MVP] - 31 Dec 2007 15:05 GMT
>I have a solution consisting of a c# project as win application and a c++
>project as classlibrary. Both are .net 2.0
[quoted text clipped - 29 lines]
> ANY pointers will be greatly appresiated since I am completely stumped by
> now.

Your C++/CLI dll depends on the VC runtime libraries Version 9 that comes
with VS2008, the dependent libraries and their version   are set through a
manifest file that gets embedded in the resulting dll depending on the
project type, for a managed assembly (C++/CLI) your depend on the VCR, so
you need at least to include VCR libraries (see redist under the VC
directory) with your project or you need to install the vcredist package
before or during deployment.

To install the complete VCR on the target system, you'll have to copy
"?:\Microsoft SDKs\v6.0A\Bootstrapper\packages\vcredist_x86 to the target
and run "vcredist_x86.exe".

Willy.
Joe Withawk - 31 Dec 2007 15:38 GMT
> Your C++/CLI dll depends on the VC runtime libraries Version 9 that comes
> with VS2008, the dependent libraries and their version   are set through a
[quoted text clipped - 7 lines]
> "?:\Microsoft SDKs\v6.0A\Bootstrapper\packages\vcredist_x86 to the target
> and run "vcredist_x86.exe".

If you were a little bit closer you would get a great big happy new year
hug!
That was the solution. It sounded as if you knew what the problem was and
you sure did :-)

Thanks for the help! Thanks to the other people here who helped with
debugging tips as well!

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.