Filed Under (Script#) by Christiaan van Bergen on July-12-2007

Over het algemeen werkt de Script# compiler (versie 0.3.0.0) afdoende om de meest gangbare C# code om te zetten naar JavaScript. De volgende code echter niet:

   1:  using System;
   2:   
   3:  namespace TestClasses
   4:  {
   5:   
   6:      public class ClassA
   7:      {
   8:          private static ClassA _classa;
   9:          public static ClassA Empty
  10:          {
  11:              get
  12:              {
  13:                  if (_classa == null)
  14:                      _classa = new ClassA();
  15:                  return _classa;
  16:              }
  17:          }
  18:      }
  19:   
  20:      public class ClassB
  21:      {
  22:          private ClassA _classa;
  23:          public ClassA ClassA
  24:          {
  25:              get
  26:              {
  27:                  if (_classa == null)
  28:                      return ClassA.Empty;
  29:                  else
  30:                      return _classa;
  31:              }
  32:              set { _classa = value; }
  33:          }
  34:      }
  35:  }

 De foutmelding die hierbij wordt gegeven is :

Error 1 The “ScriptCompilerTask” task failed unexpectedly.
nStuff.ScriptSharp.Preprocessor.PreprocessorException:
Unable to resolve or open included file ‘%code%’ …

De oorzaak van de fout zit hem in de regels 23 of 28. Wanneer je de property ClassB.ClassA hernoemt naar iets dat niet overeenkomt met de typenaam van de property (bijv. ClassB.classa), of door het retourneren van de static ClassA.NullType weg te halen dan compileert het prima.

Dit fenomeen kan ook resulteren in de melding dat de compile gelukt is, maar dat de output in de vorm van het javascript bestand niet geheel compleet is.

Overigens, controleer sowieso of het javascript resultaat compleet is door te kijken of de commentaarregels van Script# de laatste regels zijn. Dit zou je prima kunnen automatiseren met een Custom MsBuild Task zoals ook beschreven in mijn post van 4 juli “Oplossing ‘numeric constant overflow’ in Script#.



You must be logged in to post a comment.