Asp.net mvc 如何在一个解决方案中的多个项目之间共享脚本?

Asp.net mvc 如何在一个解决方案中的多个项目之间共享脚本?,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,以防问题不清楚。我在一个解决方案中有3个MVC项目。每次我创建一个新项目时,它都会添加“Scripts”文件夹,其中包含我需要的所有.js文件。我不想每次都为每个应用程序创建这个。是否有一种方法可以引用解决方案中中心文件夹中的脚本,以便所有应用程序/项目都可以共享一个公共脚本文件夹,其中包含它们之间的所有公共脚本 编辑: 请解释这样做的利弊…现在我很好奇。在IIS中为3个应用程序中的每个应用程序创建一个指向相同脚本文件夹的虚拟文件夹。然后您只需要将它们保存在单个应用程序中。还有其他选择,但这实际

以防问题不清楚。我在一个解决方案中有3个MVC项目。每次我创建一个新项目时,它都会添加“Scripts”文件夹,其中包含我需要的所有.js文件。我不想每次都为每个应用程序创建这个。是否有一种方法可以引用解决方案中中心文件夹中的脚本,以便所有应用程序/项目都可以共享一个公共脚本文件夹,其中包含它们之间的所有公共脚本

编辑:
请解释这样做的利弊…现在我很好奇。

在IIS中为3个应用程序中的每个应用程序创建一个指向相同脚本文件夹的虚拟文件夹。然后您只需要将它们保存在单个应用程序中。还有其他选择,但这实际上取决于应用程序的结构

编辑


一个更可怕的想法是使用区域。在公共区域中,有一个脚本目录,其中包含要编译的脚本集。然后通过将它们从dll中取出,自己为它们提供服务。如果您预见到公共区域以后会有更多功能,这可能是一个好主意。

默认情况下包含的大多数文件也可以通过各种CDN获得

如果您不添加自己的自定义脚本,您甚至可能不需要脚本目录


Microsoft的脚本CDN:

以下是我的建议:

右键单击解决方案并创建一个新的解决方案文件夹,名为
Common Javascript Files
(或您想调用它的任何名称)

右键单击解决方案,单击Windows资源管理器中的打开文件夹, 或手动导航到其他版本的Visual Studio:(

在解决方案目录中,创建一个与解决方案文件夹同名的目录(解决方案文件夹通常与源代码级别的目录不匹配,但出于安全考虑,这将是正确的)

在此新目录中,添加需要在解决方案之间共享的文件

在Visual Studio中,单击解决方案文件夹并选择“添加-现有项”

在“文件选择”对话框中,导航到以前创建的目录,选择添加到该目录的文件,然后单击“添加”

在每个需要共享文件的项目中,右键单击该项目(或项目中的目录),然后单击“添加-现有项”

导航到共享目录,选择文件并单击下拉箭头,然后单击添加为链接

现在,项目中的文件基本上是解决方案文件夹中文件的捷径。但它们被视为项目中的实际文件(包括.CS或Visual Basic文件,它们将被编译为项目中实际存在的文件)

专业人士

  • 文件在设计时在项目之间真正共享
  • 只能添加每个项目所需的文件,而不是全部或全部
  • 不需要在IIS中进行任何配置(虚拟目录等)
  • 如果解决方案在TFS源代码管理中,则可以将目录添加到TFS源代码,共享文件将受源代码管理
  • 通过在项目中选择文件进行编辑,将编辑实际文件
  • 删除链接文件不会删除该文件
  • 这不仅限于JS文件,链接文件可以是您可能需要的任何文件(图像、Css、Xml、CS、CSHTML等)
缺点

  • 每个部署都有自己的文件
  • 当理解解决方案文件夹不是解决方案目录中存在的目录时,有一个很小的学习曲线

就这样说吧,在我看来,这是最好、最简单的解决方案,我花了一周的时间试图找到最好、最简单的方法,但总是弊大于利:

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
  ...
以下是对其功能的解释:

对MvcApp2执行同样的操作。现在,在每次构建之后,新的静态文件将复制到您的应用程序中,您可以访问诸如“~/Shared/css/site.css”之类的文件

如果需要,您可以调整上述命令,将脚本从.dll复制到每个应用程序的scripts文件夹,这样您就可以将一些脚本移动到.dll,而无需更改任何路径,例如:

如果要在每次生成后仅将Resources/Shared/scripts中的脚本复制到MvcApp1/scripts中,请执行以下操作:

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

imo,最好的做法是推出您自己的CDN…基本上只需在IIS中创建另一个站点并为其提供自己的绑定,例如。“http://cdn.somedomain.com"

然后将所有css/js/字体/共享图像等存储在CDN站点上,并从其他站点链接到它们

这样做可以解决两个问题

  • 您的所有资料都会在需要时共享,并且每个文件只需管理一个修订版
  • 您的用户浏览器可以将它们缓存在一个位置,而不是为每个使用它们的站点下载您的资料副本
  • 我之所以添加这个答案,是因为我看到很多人都在引用创建虚拟目录。虽然这确实共享了文件,但却为他们创建了多个下载路径,这是对带宽的极大浪费。如果你允许用户一次性下载jquery.js(1*个站点),为什么还要让他们下载jquery.js(cdn.somedomain.com)


    另外,当我说浪费带宽时,我指的不仅仅是服务器带宽,我指的是数据计划中的移动用户……例如,我访问了我们公司的人力资源网站(insuance等)前几天在我的手机上,它一次就消耗了25mb,下载了jquery和一堆东西,每次5次……每月2gb的数据计划,这样做的网站真的让我很恼火。

    这是一个建议,允许您在不重新编译项目的情况下调试脚本:

    • 选择一个“master”项目(用于调试),并将物理文件添加到该项目中
    • 使用“添加为链接”功能a
      start xcopy "$(SolutionDir)Resources\Shared\Scripts\*" "$(SolutionDir)MvcApp1\Scripts" /r /s /i /y