如果问题不明确。我在一个解决方案中有3个MVC项目。每次我创建一个新项目时,它都会添加“Scripts”文件夹,其中包含我需要的所有.js文件。我不想每次都为每个应用程序创建这个。有没有办法从解决方案的中央文件夹中引用脚本,这样所有应用程序/项目都可以共享一个公共脚本文件夹,其中包含它们之间共有的所有脚本?
修改 如果有任何问题,请解释这样做的利弊......现在我很好奇。
答案 0 :(得分:109)
以下是我的建议:
右键单击解决方案并创建一个名为Common Javascript Files
的新解决方案文件夹(或者您想要调用它的任何内容。
右键单击解决方案,在Windows资源管理器中单击打开文件夹, 或者手动浏览其他版本的Visual Studio :(
在解决方案目录中,创建一个与解决方案文件夹同名的目录(解决方案文件夹通常不匹配源代码级别的目录,但这样做是出于理智的考虑)。
在此新目录中,添加需要在解决方案之间共享的文件。
在Visual Studio中,单击解决方案文件夹,然后选择添加 - 现有项。
在文件选择对话框中,导航到上一个创建的目录,选择添加到目录中的文件,然后单击添加。
在需要共享文件的每个项目中,右键单击项目(或项目中的目录),然后单击添加 - 现有项。
导航至共享目录,选择文件并单击下拉箭头,然后单击添加为链接。
现在,项目中的文件基本上是对解决方案文件夹中文件的快捷方式。但它们被视为项目中的实际文件(包括.CS或Visual Basic文件,它们将被编译为实际存在于项目中的文件)。
<强>赞成强>
<强> CONS 强>
答案 1 :(得分:21)
最好的办法,imo,就是推出自己的CDN ......基本上只是在IIS中创建另一个网站,并给它自己的绑定,例如“http://cdn.somedomain.com”
然后将所有css / js / fonts / shared images等存储在CDN网站上,并从其他网站链接到它们。
这样做可以解决2个问题,
我添加了这个答案,因为我看到很多人推荐创建虚拟目录。虽然这确实共享文件,但它为它们创建了多个下载路径,这极大地浪费了带宽。为什么让你的用户下载jquery.js(1 *个站点数),你可以允许他们下载一次(cdn.somedomain.com)。
另外,当我说浪费带宽时,我不只是谈论服务器带宽,我在谈论数据计划的移动用户......例如,我在我的公司HR网站(保险等)上前几天打电话,大门消耗了250mb,每次下载jquery和一堆东西5次......每月一个2GB的数据计划,这样做的网站真让我烦恼。
答案 2 :(得分: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
...
将以下内容添加到MvcApp1 - &gt;项目 - &gt; MvcApp1属性 - &gt;建立活动 - &gt;发布后事件:
start xcopy "$(SolutionDir)Resources\Shared\*" "$(SolutionDir)MvcApp1\Shared" /r /s /i /y
对MvcApp2执行相同操作。现在每次构建完成后,新的静态文件将被复制到您的应用程序中,您可以访问“〜/ Shared / css / site.css”等文件
如果你想要,你可以调整上面的命令,将脚本从.dll复制到每个应用程序的脚本文件夹,这样你就可以将一些脚本移动到.dll而不必改变任何路径,例如:
如果您希望在每次构建后仅将资源/共享/脚本中的脚本复制到MvcApp1 /脚本中:
start xcopy "$(SolutionDir)Resources\Shared\Scripts\*" "$(SolutionDir)MvcApp1\Scripts" /r /s /i /y
答案 3 :(得分:4)
这是一个迟到的答案,但微软已经添加了一个名为Shared Project
的项目类型,从Visual Studio 2013 Update 2
开始,可以完全按照您的要求而不必使用link
个文件。
共享项目引用显示在“引用”节点下 解决方案资源管理器,但共享项目中的代码和资产是 将它们视为链接到主项目的文件。
“在以前版本的Visual Studio中,您可以通过添加 - >现有项目然后选择链接来共享项目之间的源代码。但这有点笨重,每个单独的源文件都必须单独选择随着支持多个不同平台(iOS,Android等),他们决定通过添加共享项目的概念,更容易在项目之间共享源代码。“
此主题的信息:
What is the difference between a Shared Project and a Class Library in Visual Studio 2015?
答案 4 :(得分:2)
在IIS中,为3个应用程序中的每个应用程序创建一个指向相同脚本文件夹的虚拟文件夹。然后,您只需将它们保存在单个应用程序中。还有其他选择,但它实际上取决于您的应用程序的结构。
修改强>
更可怕的想法是使用区域。在公共区域中有一个脚本目录,脚本设置为要编译。然后通过将它们从dll中取出来为自己服务。如果您预见到公共区域稍后会有更多功能,那么这可能是一个好主意。
答案 5 :(得分:2)
一个建议,允许您调试脚本而无需重新编译项目:
通过这种方式,您可以修改“ master ”项目中的脚本,而无需重新启动调试器,这对我来说是个不同的世界。
答案 6 :(得分:1)
默认情况下包含的大多数文件也可以通过各种CDN获得。
如果您没有添加自己的自定义脚本,则可能甚至不需要脚本目录。
Microsoft的脚本CDN:http://www.asp.net/ajaxlibrary/cdn.ashx