万一问题不清楚。我在一个解决方案中有3个MVC项目。每次我创建一个新项目时,它都会添加“ Scripts”文件夹以及所有我需要的.js文件。我不想每次都为每个应用程序创建它。有没有办法从解决方案的中央文件夹中引用脚本,以便所有应用程序/项目都可以与它们之间的所有通用脚本共享一个通用脚本文件夹?
编辑: 如果有的话,请说明这样做的利弊...现在我很好奇。
万一问题不清楚。我在一个解决方案中有3个MVC项目。每次我创建一个新项目时,它都会添加“ Scripts”文件夹以及所有我需要的.js文件。我不想每次都为每个应用程序创建它。有没有办法从解决方案的中央文件夹中引用脚本,以便所有应用程序/项目都可以与它们之间的所有通用脚本共享一个通用脚本文件夹?
编辑: 如果有的话,请说明这样做的利弊...现在我很好奇。
Answers:
这是我的建议:
右键单击解决方案,然后创建一个新的解决方案文件夹,该文件夹称为Common Javascript Files
(或任何您喜欢的名称。
右键单击解决方案,在Windows资源管理器中单击“打开文件夹”,或在其中手动导航以查找其他版本的Visual Studio :(
在解决方案目录中,创建一个与解决方案文件夹具有相同名称的目录(解决方案文件夹通常在源代码级别与目录不匹配,但是为了理智起见)。
在这个新目录中,添加需要在解决方案之间共享的文件。
在Visual Studio中,单击解决方案文件夹,然后选择添加-现有项。
在文件选择对话框中,导航到先前创建的目录,选择添加到该目录的文件,然后单击添加。
在需要共享的文件中的每个项目,右键单击该项目(或目录在项目内),然后单击添加-现有的项目。
导航到共享目录,选择文件,然后单击下拉箭头,然后单击“添加为链接”。
现在,项目中的文件实际上是解决方案文件夹中文件的捷径。但是它们被视为项目中的实际文件(包括.CS或Visual Basic文件,它们将被编译为项目中实际存在的文件)。
优点
缺点
imo最好的办法是滚动自己的CDN ...基本上,只需在IIS中创建另一个站点并为其提供自己的绑定,例如“ http://cdn.somedomain.com”
然后将所有css / js / fonts /共享的图像等存储在CDN站点上,并从其他站点链接到它们。
这样做可以解决2个问题,
我添加此答案是因为我看到很多人都在引用创建虚拟目录。尽管确实共享文件,但它会为它们创建多个下载路径,这是对带宽的极度浪费。当您允许用户在(cdn.somedomain.com)上一次下载jquery.js(网站数量为1 *)时,为什么要让他们下载。
另外,当我说浪费带宽时,我不仅在谈论服务器带宽,还在谈论数据计划中的移动用户...例如,我在手机上访问了我们公司的人力资源站点(保险等)一天,它一口气就消耗了25mb,每次下载jquery和一堆东西5次...在每月2GB的数据计划中,这样做的网站真的让我很烦。
在这里,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->项目-> MvcApp1属性->生成事件->生成后事件:
start xcopy "$(SolutionDir)Resources\Shared\*" "$(SolutionDir)MvcApp1\Shared" /r /s /i /y
这是有关其作用的说明:在与bin目录相同级别的引用程序集中包括Build action content files目录
对MvcApp2执行相同的操作。现在,在每次构建后,都会将新鲜的静态文件复制到您的应用中,您可以访问“〜/ Shared / css / site.css”之类的文件
如果您希望调整上述命令以将脚本从.dll复制到每个应用程序的scripts文件夹,则可以将某些脚本移至.dll而无需更改任何路径,例如:
如果要在每次构建后仅将脚本从资源/共享/脚本复制到MvcApp1 /脚本中:
start xcopy "$(SolutionDir)Resources\Shared\Scripts\*" "$(SolutionDir)MvcApp1\Scripts" /r /s /i /y
$(SolutionDir)
在运行完成后从其中删除这些文件。将它们留在那里可能会使其他开发人员感到困惑。3)您在资源文件夹后的括号中有(DLL)。有什么具体方法可以设置吗?
这是一个迟到的答案,但微软已添加称为项目类型Shared Project
出发Visual Studio 2013 Update 2
,可以做你wan't什么,而不必link
文件。
共享项目引用显示在解决方案资源管理器的“引用”节点下,但是共享项目中的代码和资产被视为链接到主项目的文件。
“在Visual Studio的早期版本中,您可以通过添加->现有项,然后选择链接来在项目之间共享源代码。但是这有点笨拙,每个单独的源文件都必须单独选择。不同的平台(iOS,Android等),他们决定通过添加共享项目的概念来简化项目之间的源共享。”
来自此线程的信息:
一个建议,使您可以调试脚本而无需重新编译项目:
这样,您可以在“ master ”项目中修改脚本,而无需重新启动调试器,这对我来说是与众不同的。
在IIS中,为3个应用程序中的每一个创建一个指向相同脚本文件夹的虚拟文件夹。然后,您只需要将它们保留在单个应用程序中即可。还有其他选择,但这实际上取决于应用程序的结构。
编辑
一个更可怕的想法是使用Areas。在公共区域中有一个脚本目录,其中包含要编译的脚本。然后通过让他们脱离dll来为自己服务。如果您以后预见公共区域具有更多功能,那么这可能是个好主意。
默认情况下包含的大多数文件也可以通过各种CDN获得。
如果您不添加自己的自定义脚本,则可能甚至不需要脚本目录。
Microsoft的脚本CDN:http : //www.asp.net/ajaxlibrary/cdn.ashx