I'm not sure exactly why this happens, I think it's something to do with 
how the .NET runtime itself delay-loads assemblies and the rules it has 
for looking for dependent dll's

There are three ways I know of to work around this:

1. Use Dir.chdir to switch your working directory to 
D:\Programs\Univeris\FooBoo\bin before you start loading the dll's
2. Add to ruby's load path using $: << 'D:\Programs\Univeris\FooBoo\bin'
3. Hook the CLR's AssemblyResolve event... this is a bit more complicated, 
you can look up how this works on MSDN or I can tell you more if you'd 
like


______________________________________________________

Orion Edwards | Technical Leader 
PHONE +64 7 838 9800 | FAX +64 7 838 9801 | 
EMAIL orion.edwa...@gallagher.co | WEB www.gallagher.co  




From:   Alexander Ranger <li...@ruby-forum.com>
To:     ironruby-core@rubyforge.org
Date:   14/08/2012 05:41 p.m.
Subject:        [Ironruby-core] Using .Net cascade assemblies
Sent by:        ironruby-core-boun...@rubyforge.org



Hello.

I've got 2 .Net assemblies, for example, Foo.dll and Boo.dll

Boo contains
namespace BooModule
{
  public class Boo
  {
    public string Speak()
    {
      return "Hello from class Boo";
    }
  }

  public interface IFoo
  {
    string Comment();
  }
}

Foo contains

namespace FooModule
{
  public class Foo : IFoo
  {
    public string Comment()
    {
      return "Class Foo inhereted from IFoo";
    }
  }
}

In IronRuby console I try:

IronRuby 1.1.3.0 on .NET 4.0.30319.239
Copyright (c) Microsoft Corporation. All rights reserved.

>>> require 'D:\Programs\Univeris\FooBoo\bin\Boo'
=> true
>>> include BooModule
=> Object
>>> require 'D:\Programs\Univeris\FooBoo\bin\Foo'
=> true
>>> include FooModule
(ir):1:in `const_missing': uninitialized constant Object::FooModule
(NameError)
        from (ir):1

If I inherit Foo : Boo I get the same error.

But if I move the declaration to the Foo propject, so it's like

namespace FooModule
{
  public interface IFoo
  {
    string Comment();
  }

  public class Foo : IFoo
  {
    public string Comment()
    {
      return "Class Foo inhereted from IFoo";
    }
  }
}

Everything works just fine.

IronRuby 1.1.3.0 on .NET 4.0.30319.239
Copyright (c) Microsoft Corporation. All rights reserved.

>>> require 'D:\Programs\Univeris\FooBoo\bin\Foo'
=> true
>>> include FooModule
=> Object
>>> foo = Foo.new
=> FooModule.Foo
>>> foo.Comment
=> 'Class Foo inhereted from IFoo'


But I've got a really huge program system that consists of several big
dll libraries which I want to use via IronRuby and I just can't move all
those libraries into one dll file and into one namespace.


What am I doing wrong?

-- 
Posted via http://www.ruby-forum.com/.
_______________________________________________
Ironruby-core mailing list
Ironruby-core@rubyforge.org
http://rubyforge.org/mailman/listinfo/ironruby-core

<<image/gif>>

_______________________________________________
Ironruby-core mailing list
Ironruby-core@rubyforge.org
http://rubyforge.org/mailman/listinfo/ironruby-core

Reply via email to