如何在一个解决方案中共享多个项目中的脚本?

EKe*_*Ket 71 asp.net-mvc asp.net-mvc-3

如果问题不明确.我在一个解决方案中有3个MVC项目.每次我创建一个新项目时,它都会添加"Scripts"文件夹,其中包含我需要的所有.js文件.我不想每次都为每个应用程序创建这个.有没有办法从解决方案中的中央文件夹引用脚本,以便所有应用程序/项目可以共享一个公共脚本文件夹,其中包含所有常见脚本?

编辑: 如果有任何问题,请解释这样做的利弊...现在我很好奇.

Eri*_*ips 111

这是我建议的:

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

新解决方案文件夹

常见的Javascript文件解决方案文件夹

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

打开文件夹在Windows资源管理器

在解决方案目录中,创建一个与解决方案文件夹同名的目录(解决方案文件夹通常不匹配源代码级别的目录,但这样做是为了理智).

常见的Javascript文件目录

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

将Javascript文件添加到目录

在Visual Studio中,单击解决方案文件夹,然后选择" 添加 - 现有项".

Visual Studio添加 - 现有的Itme

在文件选择对话框中,导航到上一个创建的目录,选择添加到目录中的文件,然后单击" 添加".

选择要添加的文件

解压缩文件夹文件

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

项目添加现有项目

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

添加为链接

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

链接文件

PROS

  • 设计时,文件在项目中真正共享
  • 只能添加每个项目所需的文件,这不是全部或全部
  • 在IIS中不需要任何配置(虚拟目录等)
  • 如果解决方案在TFS源控件中,则可以将目录添加到TFS源,并且共享文件将受源控制.
  • 通过在项目中选择文件来编辑文件,将编辑实际文件.
  • 删除链接文件不会删除该文件.
  • 这不仅限于JS文件,链接文件可以是您可能需要的任何文件(Images,Css,Xml,CS,CSHTML等)

缺点

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

  • 注意在调试期间无法访问链接文件也很有用,除非将任务添加到项目文件中以手动复制链接文件[如此处所述](http://mattperdeck.com/post/Copying-linked -content - 文件 - 在 - 每个 - 构建 - 使用 - MSBuild.aspx). (36认同)
  • @Fonsini正确设置链接文件的属性. (2认同)
  • 我喜欢这种方法,但我无法让它与我想在两个项目之间共享的 CSS 文件等一起使用。我创建了单独的文件夹,将 CSS 复制到其中,然后添加此 CSS 作为内容文件夹的链接。问题是 BundleConfig 无法解决此问题,因此不会将 CSS 链接添加到头部。我尝试在链接属性上选择“始终复制”,但没有成功。这是一个问题吗,因为我在开发时在 Visual Studio 中运行它,并且在这种情况下没有发生实际的复制? (2认同)
  • 这个解决方案很好,但你不能将它与 Asp.net 捆绑包一起使用:文件不会被捆绑。由于捆绑是在 ASP.NET 项目中处理客户端资源的正确方法,因此这是一个相当大的骗局。 (2认同)

Rya*_*ann 22

最好的办法,imo,就是滚动你自己的CDN ...基本上只是在IIS中创建另一个站点并给它自己的绑定,例如" http://cdn.somedomain.com "

然后将所有css/js/fonts/shared images等存储在CDN站点上,并从其他站点链接到它们.

这样做解决了2个问题,

  1. 您需要的所有内容都是共享的,您只需要为每个文件管理1个版本.
  2. 您的用户浏览器可以将它们缓存在一个位置,而不是为每个使用它们的网站下载您的资料的副本.

我添加了这个答案,因为我看到很多人推荐创建虚拟目录.虽然这确实共享文件,但它为它们创建了多个下载路径,这极大地浪费了带宽.为什么让你的用户下载jquery.js(1*个站点数),你可以允许他们下载一次(cdn.somedomain.com).

此外,当我说浪费带宽时,我不只是谈论服务器带宽,我在谈论数据计划的移动用户......例如,我在我的手机上点击了我们公司的HR网站(保险等)一天,它消耗了250mb就在门外,下载了jquery和一堆东西,每次5次...在一个2GB的月份数据计划中,这样做的网站真的让我烦恼.


for*_*atc 11

在这里,IMO是最好和最简单的解决方案,我花了一个星期试图找到最好和最简单的方法,总是比专业人士更多的利弊:

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
  ...
Run Code Online (Sandbox Code Playgroud)

将以下内容添加到MvcApp1 - > Project - > MvcApp1 Properties - > Build events - > post build event:

start xcopy "$(SolutionDir)Resources\Shared\*" "$(SolutionDir)MvcApp1\Shared" /r /s /i /y
Run Code Online (Sandbox Code Playgroud)

以下是对它的作用的解释:包括来自引用程序集的构建操作内容文件目录,与bin目录处于同一级别

为MvcApp2做同样的事情.现在,每次构建后,新的静态文件将被复制到您的应用程序,您可以访问"〜/ Shared/css/site.css"等文件

如果你想要,你可以调整上面的命令将脚本从.dll复制到每个应用程序的脚本文件夹,这样你就可以将一些脚本移动到.dll而不必更改任何路径,这里是例子:

如果要在每次构建后仅将资源/共享/脚本中的脚本复制到MvcApp1 /脚本中:

start xcopy "$(SolutionDir)Resources\Shared\Scripts\*" "$(SolutionDir)MvcApp1\Scripts" /r /s /i /y
Run Code Online (Sandbox Code Playgroud)


Ogg*_*las 5

这是一个迟到的答案,但微软已添加称为项目类型Shared Project出发Visual Studio 2013 Update 2,可以做你wan't什么,而不必link文件。

共享项目引用显示在解决方案资源管理器的“引用”节点下,但是共享项目中的代码和资产被视为链接到主项目的文件。

“在Visual Studio的早期版本中,您可以通过添加->现有项,然后选择链接来在项目之间共享源代码。但是这有点笨拙,每个单独的源文件都必须单独选择。不同的平台(iOS,Android等),他们决定通过添加共享项目的概念来简化项目之间的源共享。”

https://blogs.msdn.microsoft.com/somasegar/2014/04/02/visual-studio-2013-update-2-rc-windows-phone-8-1-tools-shared-projects-and-universal- Windows应用/

来自此线程的信息:

Visual Studio 2015中的共享项目和类库有什么区别?

/sf/answers/2144694681/