77 votes

Comment partager des scripts entre plusieurs projets dans une solution?

Dans le cas où la question n'était pas claire. J'ai 3 projets MVC dans une Solution. Chaque fois que je créer un nouveau projet, il ajoute le dossier "Scripts" avec tous les .js fichiers, je n'en aurez jamais besoin. Je ne veux pas avoir ce créé à chaque fois pour chaque application. Est-il un moyen de scripts de référence à partir d'un dossier central dans la solution pour toutes les applications et les projets peuvent partagent un même dossier de script avec tous les scripts de commun entre eux?

Edit: *Veuillez expliquer les avantages et les inconvénients de le faire si il y a de tout...maintenant, je suis curieux.*

Merci!

121voto

Erik Philips Points 18156

Voici ce que je recommande:

Cliquez-droit sur la solution et de créer un Nouveau Dossier de Solution appelés Common Javascript Files (ou que vous vous sentiez comme en l'appelant.

New Solution Folder

Common Javascript Files Solution Folder

Clic droit sur la Solution, cliquez sur Ouvrir le Dossier dans l'Explorateur Windows, ou y naviguer manuellement pour les autres versions de Visual Studio :(

Open Folder In Windows Explorer

Dans la solution répertoire, créez un répertoire avec le même nom que le dossier de la solution (solution de dossiers ne sont pas normalement les sous-répertoires au niveau du code source, mais ce sera pour la santé mentale du saké).

Common Javascript Files Directory

Dans ce nouveau répertoire, ajouter des fichiers, qui doivent être partagées entre les solutions.

Add Javascript Files To Directory

Dans Visual Studio, cliquez sur le dossier de la solution et sélectionnez Ajouter - un Élément Existant.

Visual Studio Add - Existing Itme

Dans le dialogue de sélection de fichier, naviguez jusqu'au répertoire précédent créé, sélectionnez le ou les fichier(s) ajouté le répertoire et cliquez sur Ajouter.

Select Files To Add

Solution Folder Files

Dans chaque Projet qui a besoin d'un fichier partagé, cliquez-droit sur le projet (ou d'un répertoire dans le projet) et cliquez sur Ajouter - un Élément Existant.

Project Add Existing Item

Naviguez vers le Répertoire partagé, Sélectionnez les fichiers et cliquez sur la flèche déroulante , puis cliquez sur Ajouter en tant Que Lien.

Add As Link

Maintenant les fichiers du projets sont essentiellement des raccourcis vers les fichiers dans le Dossier de la Solution. Mais ils sont traités comme des fichiers réels dans le projet (ce qui inclut .CS ou Visual Basic fichiers, ils seront compilés en tant que fichiers qui existent réellement dans le projet).

Linked Files

PROS

  • Les fichiers sont vraiment partagés entre les projets au moment de la Conception
  • Uniquement les fichiers nécessaires pour chaque projet peut être ajouté, il n'est pas tout ou rien
  • Ne nécessite pas de configuration de IIS (répertoire virtuel etc)
  • Si la solution est dans TFS contrôle de code Source, vous pouvez ajouter le Répertoire à la TSF Source et les fichiers partagés seront source contrôlée.
  • L'édition d'un fichier en le sélectionnant dans le Projet, modifier le fichier réel.
  • La suppression d'un fichier Lié n'est pas de supprimer le fichier.
  • Ce n'est pas limité à la JS fichiers, les fichiers liés peuvent être TOUT fichier que vous pourriez avoir besoin (Images, Css, Xml, CS, CSHTML, etc)

CONS

  • Chaque déploiement obtient son propre fichier.
  • Il ya une petite courbe d'apprentissage pour comprendre que la Solution de Dossiers ne sont pas des Répertoires qui existent dans une Solution d'Annuaire.

11voto

Unavailable Points 1514

Ici, il va de l'OMI, la plus simple et la meilleure solution, j'ai passé la semaine à essayer de trouver la meilleure et la plus simple façon qui ont toujours eu plus d'inconvénients alors pour:

Resources(DLL)
  Shared
    images
      image.png
    css
      shared.css
    scripts
      jquery.js


MvcApp1
  Images
  Content
  Shared <- We want to get files from above dll here
  ...

MvcApp2
  Images
  Content
  Shared <- We want to get files from above dll here
  ...

Ajoutez ce qui suit à MvcApp1 -> Projet -> MvcApp1 Propriétés -> générer les événements -> post-construction de l'événement:

start xcopy "$(SolutionDir)Resources\Shared\*" "$(SolutionDir)MvcApp1\Shared" /r /s /i /y

Voici une explication sur ce qu'il fait: y Compris l'action de génération de contenu de répertoire de fichiers à partir de l'assembly référencé au même niveau que le répertoire bin

Faire de même pour MvcApp2. Maintenant, après chaque construction de nouveaux fichiers statiques seront copiés à votre application, et vous pouvez accéder à des fichiers comme "~/Shared/css/site.css"

Si vous le souhaitez, vous pouvez régler la commande ci-dessus pour copier des scripts à partir de .dll pour le dossier des scripts de chaque application, de cette façon, vous pouvez déplacer certains scripts .dll sans avoir à modifier les chemins d'accès,ici est un exemple:

Si vous souhaitez copier uniquement les scripts de Ressources/Shared/scripts dans MvcApp1/scripts après chaque version:

start xcopy "$(SolutionDir)Resources\Shared\Scripts\*" "$(SolutionDir)MvcApp1\Scripts" /r /s /i /y

2voto

Yuriy Faktorovich Points 33347

Dans IIS créer un dossier virtuel pointant vers le même dossier scripts pour chacune des 3 applications. Ensuite, vous aurez seulement besoin de les garder dans une seule application. Il existe d'autres alternatives, mais cela dépend vraiment de la manière dont les applications sont structurés.

Modifier

Une effrayante idée est d'utiliser les Zones. Dans une commune de la région ont un répertoire scripts les scripts à être compilé. Puis les servir vous-même par le faire sortir de la dll. Ce pourrait être une bonne idée si vous prévoyez de l'espace commun d'avoir plus de fonctionnalités plus tard.

1voto

jbrunken Points 99

La plupart des fichiers inclus par défaut sont également disponibles via différents CDN.

Si vous n’ajoutez pas vos propres scripts personnalisés, vous n’avez peut-être même pas besoin d’un répertoire de scripts.

CDN de Microsoft pour les scripts: http://www.asp.net/ajaxlibrary/cdn.ashx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X