43 votes

La manipulation commune des fichiers JavaScript dans Visual Studio 2010

Nous sommes en train de travailler sur un couple de pleinement JavaScript dépendant des applications web (nos précédentes applications ont été ASP.NET MVC, JavaScript "bonté" saupoudré over-the-top).

Nous avons un certain nombre de fichiers qui seront partagés à travers le conseil, et il serait bon de conserver ces fichiers dans un projet Commun, et "Ajouter un Lien" dans des projets individuels (comme ce serait possible avec le code compilé).

Évidemment, cela ne fonctionne pas avec quelque chose comme du code JavaScript dans le fichier n'est pas réellement 'il y a' dans l'emplacement correct.

Quelqu'un aurait-il des suggestions sur le maintien d'une seule version d'un fichier JavaScript, pour une utilisation sur plusieurs projets?

49voto

user1147862 Points 786

Je sais que cette question est ancienne, mais toujours voulu mettre en avant ma solution, car il est un peu plus simple que beardtwizzle de l'.

Vous pouvez vous assurer que Visual Studio copies de tous les fichiers liés à l'endroit où vous avez placé le lien dans Visual Studio, l'Explorateur de Solution par l'ajout, à la fin de votre .csproj fichier:

  <Target Name="CopyLinkedContentFiles" BeforeTargets="Build">
    <Copy SourceFiles="%(Content.Identity)" 
          DestinationFiles="%(Content.Link)" 
          SkipUnchangedFiles='true' 
          OverwriteReadOnlyFiles='true' 
          Condition="'%(Content.Link)' != ''" />
  </Target>

J'ai décrit comment cela fonctionne dans mon billet de blog à http://mattperdeck.com/post/Copying-linked-content-files-at-each-build-using-MSBuild.aspx

20voto

isNaN1247 Points 7480

En fin de compte, c'est de cette façon que j'ai réalisé il. Il peut ne pas être au goût de chacun -, mais il a travaillé un régal pour moi.

Remarque: Dans tous nos projets, les ressources statiques sont dans un répertoire racine appelé "éléments d'Actif", donc, par exemple, le JavaScript est toujours dans /Assets/js/ CSS et /Assets/css/.

Solution

  1. Dans le projet qui va "importer" le code commun, j'ai tout simplement ajouter de la commune .fichier js 'Link' dans /Assets/js/.
  2. Aller à l'ajout de nouvelles Propriétés et de définir des "Copier vers un Répertoire de Sortie" à "Copier si plus récent'.
  3. Maintenant, j'ai simplement modifier le projet post-événement de construction de la ligne de commande à la suivante: xcopy /Y /E "$(TargetDir)\Actifs" "$(ProjectDir)\Actifs"

Lorsque le projet est construit, il copie les fichiers importés \bin\Assets\js - la post-événement de construction prend alors une copie de ceux de plus vers le répertoire du projet dans le temps pour le site à les utiliser.

1voto

Kamyar Points 11012

La bonne solution est l'intégration de javascript/css fichiers dans votre projet. Vous pouvez le faire en utilisant WebResources.axd. C'est la manière officielle de microsoft intègre js dans ses contrôles. (Comme les contrôles de validation)

Vous pouvez trouver un bon tuto sur: http://www.4guysfromrolla.com/articles/080906-1.aspx

1voto

Will D Points 146

Je peux aussi le voir, cette question est ancienne, mais pensé que je voudrais ajouter mon grain de sel...

J'ai un fichier javascript dans un projet distinct. J'ai ajouté un lien de référence et cela fonctionne bien pour la publication, mais ne fonctionne pas dans IIS Express ou Casinni. J'ai essayé d'ajouter de routage personnalisé pour attraper le fichier manquant manuellement et de le reconfigurer, mais il est peu un hack et pour quelque raison cessé de fonctionner quand je l'ai mis à niveau vers MVC 5.1, donc, plutôt que de fixer le hack, j'ai trouvé une meilleure façon:

System.Web.Optimization a javascript faisceaux.

Dans votre projet partagé, ensemble l' Copy To Output Directory de "Copy" et Build Action de Contenu sur votre fichier js. Cela signifie que votre js fichiers dans le dossier bin de votre projet de site web. Ils ne peuvent pas être servi à partir de là (IIS coutume de servir à quelque chose dans le dossier bin pour des raisons évidentes de sécurité), mais ils peuvent être inclus dans les paquets

using System.Web;
using System.Web.Optimization;

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {   
        bundles.Add(new ScriptBundle("~/bundles/externalLibrary").Include(
                    "~/bin/scripts/externalLibrary.js"
                    ));
    }
}

Vous devez ensuite ajouter à Application_Start dans votre global.asax fichier (juste à côté de vous inscrire routes)

BundleConfig.RegisterBundles(System.Web.Optimization.BundleTable.Bundles);

ensuite utiliser votre faisceau de lien dans votre rasoir cshtml:

<script type='text/javascript' src='@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/externalLibrary")'></script>

vous aurez besoin du package nuget pour microsoft.aspnet.web.optimisation

0voto

Alex Key Points 5196

Vous pourriez peut-être utiliser des modèles visual studio

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