2010-07-19 5 views
3

J'ai ajouté un projet Script # à mon projet de site Web et j'ai créé une petite bibliothèque d'exemples comportant deux classes.Code de partage entre site Web/projet d'application Web et Script #/ScriptSharp

Maintenant, je veux utiliser ces classes à partir du code du site Web. Dans ce cas, j'ai créé un simple arbre d'objets et je l'ai sérialisé en JSON (qui serait alors récupéré par le code côté client).

J'ai essayé d'ajouter une référence au projet Script #. Il compile bien, mais me donne alors une erreur lors du lancement sur:

  • Assemblée ne se trouve pas
  • Runtime version différente

Est-il même possible de partager le code entre Script # et C# ordinaire? J'utilise Script # 0.6 avec VS 2010 et .NET 3.5 (les deux projets).

Répondre

6

Le code est totalement partageable. Je compte sur cela pour réutiliser les classes de données envoyées sur le service Web.

Qu'est-ce que vous pouvez faire est:

  1. Installation d'un seul fichier dièse appelé SharedTypes.cs dans un dossier « partagé ».
  2. Ensuite, pour chacun de vos projets, cliquez avec le bouton droit sur le nœud du projet, choisissez "Ajouter" -> "Poste existant". Recherchez SharedTypes.cs, puis cliquez sur la flèche vers le bas à côté de "Ajouter" et choisissez "Ajouter comme lien".
  3. Créez vos classes partagées là-dedans.
  4. Ajoutez un symbole de préprocesseur, par exemple "WEBSERVER", à votre projet côté serveur. Cela vous permet d'avoir des fonctionnalités légèrement différentes entre les projets si nécessaire.

Exemple:

public class MyDataPacket 
{ 
    public int UserId; 
    public string SomeData1; 
    public int SomeData2; 

#if SCRIPTSHARP 
    public MyDataPacket(MyOtherClientSideClass arg) 
    { 
     // init 
    } 
#endif 

#if WEBSERVER 
    public MyDataPacket(MyOtherServerSideClass arg) 
    { 
     // init 
    } 
#endif 
} 

EDIT: Script # inclut maintenant un symbole par défaut SCRIPTSHARP, avec l'intention plus claire que !WEBSERVER.

0

Est-il même possible de partager du code entre Script # et C# ordinaire?

Ce n'est pas vraiment possible. Votre projet devrait être en C# 2.0 et devra se conformer aux restrictions du Script #. Au lieu de cela, vous pouvez configurer un automapper.

Pour moi, j'ai trouvé plus facile d'installer un deuxième modèle de domaine dans Script #, je n'avais pas un modèle de domaine aussi vaste pour commencer. Gardez à l'esprit que Script # se résume simplement à Javascript.

+0

Peut-être que le script # aura quelques caractéristiques de commodité à cet égard à un moment donné. Bien qu'il sera probablement toujours à la traîne dans la version d'exécution. – skarmats

3

Une façon possible de partager du code entre le script # et C# consiste à ajouter un lien vers le fichier source. Dans VS, vous pouvez ajouter un fichier source à un projet en tant que lien lorsque vous l'ajoutez au projet (le fichier n'est pas copié, mais à la place, il ajoute une référence au fichier source). Dans le projet C#, le même fichier est ajouté normalement. Le résultat de ceci est, chaque fois que vous changez le code, ces changements seront reflétés dans les deux projets. Lorsque le fichier est compilé, celui du projet C# sera compilé avec le compilateur C#, celui du script # sera compilé avec le compilateur script #.

Bien sûr, vous devez faire attention à n'utiliser que des fonctionnalités communes à C# et script #. Cela limite les utilisations possibles, mais peut-être que les structures de données pourraient être partagées de cette façon.