繁体   English   中英

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

[英]Handling common JavaScript files in Visual Studio 2010

我们正在开始研究几个完全依赖于JavaScript的Web应用程序(我们之前的应用程序是ASP.NET MVC,其中JavaScript的优点已经过去了。)

我们有一些文件将被全面共享,将这些文件存储在Common项目中,并将它们“添加为链接”到各个项目中(这与编译代码一样)是很好的。

显然,这不适用于像JavaScript这样的东西,因为文件实际上并没有在正确的位置。

有没有人建议保留单个版本的共享JavaScript文件,以便在多个项目中使用?

我知道这个问题很古老,但仍然想提出我的解决方案,因为它比胡子w更简单。

您可以通过在.csproj文件末尾添加此文件,确保Visual Studio将所有链接文件复制到您在Visual Studio的解决方案资源管理器中放置链接的位置:

  <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文件“As Link”。
  2. 转到新添加的属性并将“复制到输出目录”设置为“如果更新则复制”。
  3. 现在我只需将项目的构建后事件命令行编辑为以下内容: xcopy / Y / E“$(TargetDir)\\ Assets”“$(ProjectDir)\\ Assets”

当项目构建时,它会将导入的文件复制到\\ bin \\ Assets \\ _js - 构建后事件然后将这些文件的副本复制到项目目录中 - 以便网站使用它们。

我也可以看到这个问题很古老,但我想我会加上我的两分钱......

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

System.Web.Optimization有javascript包。

在共享项目中,将Copy To Output Directory设置为js文件上的“始终复制”和“将Build Action为“内容”。 这意味着您的js文件最终会出现在您网站项目的bin文件夹中。 它们无法从那里提供(IIS出于明显的安全原因,不会在bin文件夹中提供任何内容),但它们可以包含在捆绑包中

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

然后在你的razor cshtml中使用你的捆绑链接:

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

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

正确的解决方案是在项目中嵌入javascript / css文件。 您可以使用WebResources.axd来完成此操作。 这是microsoft在其控件中嵌入js的官方方式。 (与验证控件一样)

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

这篇博文描述了@beardtwizzle对答案的另一种解决方案:

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

这个想法很相似:

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

因此,不是后期构建事件,而是通过修改的构建步骤复制文件。 对我来说,这个解决方案感觉有点清洁(但这可能是一个品味的问题)。 无论如何,我只是将其添加到我们的解决方案中,到目前为止它的工作效

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

下载扩展程序后,您可以向解决方案添加共享项目(空)。 该项目可以在Visual C#,Visual C ++和JavaScript的项目模板中找到。

然后在任何对您有意义的文件夹结构中包含要共享到共享项目的文件。

接下来,您将共享项目作为共享引用包含在该解决方案中需要访问共享文件的其他项目中。 右键单击另一个项目,然后选择“添加共享项目引用”。

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

该技术旨在让Universal应用程序在Windows Phone和Windows应用商店应用之间共享代码,因此请注意,您可能无法在不同场景中共享,但值得一试,看看它是否能满足您的需求。

您也许可以使用visual studio模板

很好的问题,我一直在考虑这个问题。 在我脑海中浮现的唯一解决方案是在网络上托管文件并使用它们像cdn或使用符号链接。 您可以在Visual Studio中添加代码片段以引用它们。

使用适当的版本控制。

保持JS在一个位置,然后就git pull (或equivelant水银/集市),它们放回你的代码,只要您更新您的JavaScript。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM