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



我有很多解决方案。有很多重叠,因此代码进入"通用"代码的另一个解决方案,我将其引用为 DLL 或 git 子模块。

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

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

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

如果你打算有很多这样的包,请构建你自己的 nuget 包,并将它们托管在共享或你自己的专用 nuget 服务器上。 这非常容易做到,当包添加到项目时,你可以在必要时执行脚本,并且 nuget 包是版本控制的,因此当你更新库时,你可以发布版本号递增的更新包,它们将共存。

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

然而,你并非没有希望。实现此目的的最佳方法实际上是创建自己的 Nuget 包。你可以拥有一个包含所有这些公共资源的项目/解决方案,并使用它来生成 Nuget 包。然后,可以在其他项目/解决方案中安装此 Nuget 包。对静态资源进行更改时,请发布对 Nuget 包的更新,然后升级使用它的所有项目。甚至可以创建专用 Nuget 存储库,以便包仅在内部可用。

以下是一些可以帮助您完成这项工作的资源:

  • 创建和发布包
  • 使用 GUI(包资源管理器)生成包
  • 托管自己的 NuGet 源
好的,

我找到了一种有效的方法,简单,自给自足 - 并且不需要本地nuget服务器(这对于如此简单的事情来说是矫枉过正的,如果我能帮助它,我更喜欢更少的工具和更少的服务器)。

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

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

rd /S /Q "$(ProjectDir)Scriptsinclude"
rd /S /Q "$(ProjectDir)Stylesinclude"
md "$(ProjectDir)Scriptsinclude"
md "$(ProjectDir)Stylesinclude"

添加到生成后事件以复制文件:

xcopy /D /S /F /Y $(SolutionDir)gitsubmodulenameprojectnameStyles*.min.css $(ProjectDir)Stylesinclude
xcopy /D /S /F /Y $(SolutionDir)gitsubmodulenameprojectnameScripts*.js $(ProjectDir)Scriptsinclude

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

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

优点:

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

缺点:

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

  • 将构建后副本复制到相应的 bin 目录中
  • 一个 T4 模板(在构建时运行),用于拉入外部文件

虽然他们都是"笨蛋"...

  • 也有可能 自定义VirtualPathProvider ,但我认为假设您可以访问 IIS。


- 一种将它们作为链接文件包含的工作方法,但仅适用于发布模式

最新更新