处理Visual Studio 2010中的常见JavaScript文件

我们正在开发一些完全依赖于JavaScript的Web应用程序(我们以前的应用程序已经是ASP.NET MVC,而JavaScript是“善良的”)。

我们有几个文件将被共享,并且将这些文件存储在一个通用项目中,并将它们添加到单独的项目中(编译后的代码将是可能的)。

显然,这不适用于像JavaScript这样的文件,因为该文件实际上并不在“正确的位置”。

有没有人有任何build议,保持单个版本的共享JavaScript文件,跨多个项目使用?

我知道这个问题是古老的,但仍然想提出我的解决scheme,因为它比beardtwizzle更简单一些。

您可以确保Visual Studio将所有链接的文件复制到您在Visual Studio的解决scheme资源pipe理器中放置链接的位置,方法是在.csproj文件的末尾添加该文件:

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

我已经描述了这是如何工作在我的博客文章http://mattperdeck.com/post/Copying-linked-content-files-at-each-build-using-MSBuild.aspx

最后,这是我已经实现的。 这可能不是每个人的口味 – 但为我工作的一种享受。

注意:在我们的所有项目中,静态资源都位于名为“Assets”的根目录中,因此,例如,JavaScript始终位于/ Assets / js /和CSS / Assets / css /中。

  1. 在要导入公共代码的项目中,我只需在/ Assets / js /中添加常用的.js文件“作为链接”即可。
  2. 转到新的添加的属性,并将“复制到输出目录”设置为“如果新的复制”。
  3. 现在我简单地编辑项目的后构build事件命令行如下: xcopy / Y / E“$(TargetDir)\ Assets”“$(ProjectDir)\ Assets”

当项目build立时,它将导入的文件复制到\ bin \ Assets \ js – 生成后事件然后将这些文件复制到项目目录中 – 以便网站使用它们。

正确的解决scheme是在您的项目中embeddedJavaScript / css文件。 你可以使用WebResources.axd来做到这一点。 这是微软在其控件中embeddedjs的官方方式。 (像validation控件一样)

你可以find一个很好的教程: http : //www.4guysfromrolla.com/articles/080906-1.aspx

我也可以看到这个问题很古老,但是以为我会加我两毛钱…

我在一个单独的项目中有一个JavaScript文件。 我添加了一个链接的引用,这适用于发布,但在IIS Express或Casinni中不起作用。 我尝试添加自定义路由来捕获丢失的文件并手动重新映射它,但是由于某种原因,当我升级到MVC 5.1时停止工作,所以不是修复破解文件,而是find了一个更好的方法:

System.Web.Optimization有javascript包。

在你的共享项目中,将js文件中的“ Copy To Output Directory ”设置为“始终复制”并将“ Build Action为“内容”。 这意味着你的js文件最终在你的网站项目的bin文件夹中。 他们不能从那里服务(为了明显的安全原因,IIS不会在bin文件夹中提供任何东西),但是它们可以包含在bundle中

 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" )); } } 

然后你需要把这个添加到你的global.asax文件中的Application_Start(注册路由旁边)

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

然后使用您的捆绑链接在您的剃刀cshtml:

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

您将需要microsoft.aspnet.web.optimization的nuget包

你也许可以使用visual studio模板

很好的问题,我一直在思考这个问题。 我唯一想到的解决scheme就是将这些文件托pipe在networking上,并像cdn或者使用符号链接一样使用它们。 你可以在你的visual studio中添加一个代码片段来引用它们。

这篇博客文章描述了@beardtwizzle答案的另一种解决scheme:

http://consultingblogs.emc.com/jamesdawson/archive/2008/06/03/using-linked-files-with-web-application-projects.aspx

这个想法是相似的:

  1. 将共享文件添加到Web项目作为链接
  2. 修改项目中的_CopyWebApplication构build步骤,以便链接的文件被复制到正确的目标path。

因此,而不是一个后构build事件的文件被修改的构build步骤复制。 对我来说,这个解决scheme感觉有点干净(但这可能是一个口味问题)。 无论如何,我只是把这个添加到我们的解决scheme,迄今为止效果很好!

任何人在将来遇到这个问题时应该知道Visual Studio中现在有共享项目来解决这个问题。 通用Windows项目默认使用它们,您可以通过下载并安装VS扩展来创build自己的项目: https : //visualstudiogallery.msdn.microsoft.com/315c13a7-2787-4f57-bdf7-adae6ed54450

一旦你下载了扩展,你可以添加一个共享项目(空)到你的解决scheme。 该项目可以在Visual C#,Visual C ++和JavaScript的项目模板中find。

然后在任何适合您的文件夹结构中包含要共享到共享项目的文件。

接下来,您将在该解决scheme中需要访问共享文件的其他项目中将共享项目作为共享引用join。 右键单击其他项目,然后select“添加共享项目引用”。

现在,您可以参考主项目中的共享文件,就好像共享项目中的文件存在那里一样。 它们被编译为该项目的一部分。

该技术旨在用于通用应用程序在Windows Phone和Windowsapp store应用程序之间共享代码,因此请注意,您可能在不同情况下共享时遇到麻烦,但值得一试,看看它是否能满足您的需求。

使用适当的版本控制。

将js保存在一个位置,然后只要你更新了JavaScript,就把它们(或者等价的Mercurial / Bazaar)放回你的代码中。