在项目中共享Razor视图

VJA*_*JAI 19 asp.net-mvc razor

我想在多个ASP.NET MVC项目中共享布局(Header,Navigation和Footer Razor视图).我怎样才能做到这一点?

我可以创建一个自定义NuGet包来包装常见的Razor文件,图像和CSS吗?

jle*_*ach 18

我现在不止一次通过谷歌这样做了,虽然我提出了另一个解决方案(IMO,比使用预编译器和软件包更安全,更易于管理).

事实上,我已经无耻地从Erik Phillips那里逐字逐句地回答,所以请相信他.

他说的是什么......(他特别说这是针对javascript文件的,但这对任何其他类型都有效)源代码答案

这是我建议的:

右键单击解决方案并创建一个名为的新解决方案文件夹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等)

缺点

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

AND - 从另一个答案中窃取整合信息,以下是如何将这些输出用于调试(取自下面的评论,删除的答案,链接到博客文章的构建目标,用于调试输出)

将其添加到每个消费项目的.csproj文件中:

  <Target Name="CopyLinkedContentFiles" BeforeTargets="Build">
    <Copy SourceFiles="%(Content.Identity)" 
          DestinationFiles="%(Content.Link)" 
          SkipUnchangedFiles='true' 
          OverwriteReadOnlyFiles='true' 
          Condition="'%(Content.Link)' != ''" />
 </Target>
Run Code Online (Sandbox Code Playgroud)

  • 当我添加cshtml文件作为链接时,没有intellisense和VS对待它就像所有Razor在任何代码下用红线"破坏".我还没弄明白如何解决这个问题http://stackoverflow.com/questions/41511770/add-as-link-intellisense-for-views (5认同)
  • 在他们没有参加的帖子上ping某人是行不通的.如果你想让ErikPhilips看到这个评论,你必须在原来的答案上打他 (4认同)
  • @jleach 等人 - 有没有人为 MVC Razor 视图尝试过这种方法?问题特别是关于 Razor 视图,所以列出使用这种方法的利弊是合适的。 (2认同)

Pau*_*lor 14

三种方法:

  1. 使用版本控制系统共享Razor视图源代码
  2. 将视图编译为单独的DLL文件以进行二进制共享.
  3. 创建一个NuGet包

有关如何执行选项2的信息,请参阅将ASP.NET MVC Razor视图编译为单独的DLL.

有关选项3,请参阅创建和发布包.

事实上,我认为这是关于如何编译Razor视图的原始文章:使用RazorGenerator预编译MVC Razor视图

  • 另一种方法是通过VS Build Events(项目 - >属性 - >构建事件) - 添加一些脚本来简单地将View源文件复制到MVC项目View目录. (3认同)
  • @Mark:除非你在不同解决方案中的项目之间共享,否则我不会使用Nuget包.如果您的项目都在同一个解决方案中,只需添加一个简单的参考.此外,CSS,图像等可以更好地放置在每个项目可以从中拉出的静态域上,如果它们真正共享而不是每个项目都自定义. (2认同)