如何在MVC应用程序中共享常见的js / css?

时间:2014-11-18 20:48:32

标签: asp.net asp.net-mvc visual-studio bundling-and-minification

我有很多解决方案。有很多重叠,所以代码进入另一个解决方案" common"代码,我将它作为DLL或git子模块引用。

但是还有很多常见的JavaScript和CSS,甚至还有一些.config文件和XML。我需要为每个解决方案复制它们!

如何将共享js / css拉入解决方案?请记住,共享程序集的DLL不会包含这些静态文件。

另外,重要的是,我需要能够在MVC的捆绑系统中引用那些js / css文件(毕竟这是重点)。

4 个答案:

答案 0 :(得分:3)

如果你有很多这样的话,建立你自己的nuget包并将它们托管在共享或你自己的私人nuget服务器上。这非常容易,如果需要在将软件包添加到项目中时执行脚本,并且nuget软件包已经过版本化,那么当您更新库时,可以发布具有递增版本号的更新软件包,并且将共存。

答案 1 :(得分:2)

无法在项目之间真正共享静态资源,特别是在解决方案之间 - 至少在您只有一个文件副本的意义上。对于大多数情况,将项目添加为链接通常会起作用,但静态资源不属于该保护伞,特别是如果您需要它们与捆绑系统一起使用。

然而,你并非没有希望。实现这一目标的最佳方法实际上是创建自己的Nuget包。您可以拥有一个包含所有这些公共资源的项目/解决方案,并使用它来构建Nuget包。然后,您可以在其他项目/解决方案中安装此Nuget包。当您更改静态资源时,释放对Nuget包的更新,然后升级使用它的所有项目。您甚至可以创建一个私有的Nuget仓库,以便这些包只在内部可用。

这里有一些资源可以帮助您完成这项工作:

答案 2 :(得分:2)

好的,我发现了一种有效的方法,简单,独立 - 并且不需要本地的nuget服务器(对于这么简单的东西来说太过分了,如果我可以帮助的话,我更喜欢更少的工具和更少的服务器)。

注意:我的常用代码,样式,脚本,所有内容都包含在我的解决方案中的git子模块中。如果你不这样做,只需调整下面的路径指向你的共享内容。

添加到预构建事件以删除所有文件(不是必需的,但从目标中删除在源中删除的文件):

rd /S /Q "$(ProjectDir)Scripts\include"
rd /S /Q "$(ProjectDir)Styles\include"
md "$(ProjectDir)Scripts\include"
md "$(ProjectDir)Styles\include"

添加到构建后事件以复制文件:

xcopy /D /S /F /Y $(SolutionDir)gitsubmodulename\projectname\Styles\*.min.css $(ProjectDir)Styles\include
xcopy /D /S /F /Y $(SolutionDir)gitsubmodulename\projectname\Scripts\*.js $(ProjectDir)Scripts\include

如果使用git,请将这些目录添加到.gitignore

/*/Scripts/include/
/*/Styles/include/

优点:

  • 在每次构建时,新的/已更改的文件都会被拉入您的网络项目
  • 由于它们位于脚本/样式目录中,因此可以在调试和发布模式下提供它们
  • 捆绑工作完全符合您的预期。要部署,只需执行常规bin部署
  • 您可以更改源文件(在git子模块中,而不是Web项目中)和构建,并且更改立即可用(无需编辑,重新打包,更新等nuget包)

缺点:

答案 3 :(得分:0)

只是想到一些想法,但有些可能性:

  • 将构建后的副本复制到相应的bin目录中
  • 一个T4模板(在构建版本上运行),它会引入外部文件

虽然他们都是" hacky" ...

另外
- A working method to include them as linked files,但仅适用于RELEASE模式