[C#] Ruby Scripts runnen in C# applicatie

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • skyrebel
  • Registratie: Juli 2009
  • Laatst online: 19-09 13:00
Momenteel ben ik bezig met een C# applicatie te maken die dus 1 of meerdere Ruby scripts moet uitvoeren. Dit lukt aardig, zolang het Ruby script geen andere classen "importeerd" (met de require method).

In mijn C# project heb ik een aantal .dll (oa IronRuby.dll, IronRuby.Libraries.dll, Microsoft.Scripting.dll, etc) als reference toegevoegd om de Ruby scripts te kunnen draaien.

Locatie scripts: D:\Projects\Ruby\Test
Locatie C# app: D:\Projects\VisualStudio\C#\Test

Voorbeeld Ruby script:
require 'Test'

aTest = Test.new
puts aTest.attr


De volgende code roept een Ruby script aan:
var runtime = Ruby.CreateRunTime();
var engine = runtime.GetEngine();

engine.ExecuteFile("D:\\Projects\\Ruby\\Test\\RubyScript.rb");


Als ik de applicatie run, krijg ik de volgende foutmelding:
- No such file or directory - Test

Dit werkt alleen als:
- Ruby scripts geen require bevatten
- De require met een absolute locatie is gedefinieerd
- De C# applicatie en .dll's in dezelfde als de scripts staan

Over geen vd mogelijke oplossing ben ik echt tevreden. De vraag is dus hoe kan ik dit anders oplossen? Is het mogelijk om in de applicatie referenties aan te geven waar de scripts gevonden kunnen worden? Of is mijn hele aanpak al verkeerd en moet ik een andere oplossing gebruiken?

Alle informatie is welkom.

Alvast bedankt

Acties:
  • 0 Henk 'm!

  • IceM
  • Registratie: Juni 2003
  • Laatst online: 18-09 09:28
Wat is "engine" voor type klasse?

...


Acties:
  • 0 Henk 'm!

Verwijderd

Lees dit eens door, je zou je Ruby scripts hiermee al kunnen compilen als DLL's, en dan de DLL's in C# toevoegen. ;)

[ Voor 20% gewijzigd door Verwijderd op 24-07-2009 09:53 ]


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Is je working directory niet D:\Projects\VisualStudio\C#\Test? Want dan kan hij 'Test', die waarschijnlijk in D:\Projects\Ruby\Test staat, natuurlijk niet vinden via het relatieve pad.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • skyrebel
  • Registratie: Juli 2009
  • Laatst online: 19-09 13:00
IceM schreef op vrijdag 24 juli 2009 @ 09:49:
Wat is "engine" voor type klasse?
Dat is IScriptEngine.

Acties:
  • 0 Henk 'm!

  • skyrebel
  • Registratie: Juli 2009
  • Laatst online: 19-09 13:00
AtleX schreef op vrijdag 24 juli 2009 @ 09:51:
Is je working directory niet D:\Projects\VisualStudio\C#\Test? Want dan kan hij 'Test', die waarschijnlijk in D:\Projects\Ruby\Test staat, natuurlijk niet vinden via het relatieve pad.
Ik ga er idd vanuit dat dit het probleem is. Vraag is, is hier een oplossing voor.

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

skyrebel schreef op vrijdag 24 juli 2009 @ 09:56:
[...]


Ik ga er idd vanuit dat dit het probleem is. Vraag is, is hier een oplossing voor.
Kan je nergens de execution environment instellen?

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

Verwijderd

Ondersteund Ruby geen absolute paden voor de includes? :X

Acties:
  • 0 Henk 'm!

  • Peetman
  • Registratie: Oktober 2001
  • Laatst online: 20:34

Peetman

Tjah....

Meest logische lijkt me om de .rb scripts naar de output dir te laten kopieren via de build action in visual studio en de locatie te bepalen via de executing assembly: http://msdn.microsoft.com/en-us/library/aa457089.aspx

Acties:
  • 0 Henk 'm!

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 15-08 22:46

KompjoeFriek

Statsidioot

Even een wilde gok: Backslashes escapen. Zoiets dus:
Ruby:
1
engine.ExecuteFile("D:\\Projects\\Ruby\\Test\\RubyScript.rb");

WhatPulse! - Rosetta@Home - Docking@Home


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

KompjoeFriek schreef op vrijdag 24 juli 2009 @ 10:28:
Even een wilde gok: Backslashes escapen. Zoiets dus:
Ruby:
1
engine.ExecuteFile("D:\\Projects\\Ruby\\Test\\RubyScript.rb");
Dat zal een c/p foutje zijn in de topicstart, want het niet juist escapen levert je een compiler error (unrecognized escape sequence afaik) op en geen runtime error.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • skyrebel
  • Registratie: Juli 2009
  • Laatst online: 19-09 13:00
AtleX schreef op vrijdag 24 juli 2009 @ 10:31:
[...]

Dat zal een c/p foutje zijn in de topicstart, want het niet juist escapen levert je een compiler error (unrecognized escape sequence afaik) op en geen runtime error.
Klopt idd, is een vergissing van mijn kant.

Verder:
Ruby accepteerd zeker wel absolute paden, alleen vind ik dit niet zo netjes en het betekent dat ik redelijk wat scripts moet gaan aanpassen.

De scripts tijdelijk kopieeren naar de output dir en weer verwijderen als ze klaar zijn, zou een oplossing kunnen zijn. Moet ik eens over nadenken.
Pagina: 1