在项目中共享Razor视图

时间:2013-12-17 10:23:49

标签: asp.net-mvc razor

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

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

3 个答案:

答案 0 :(得分:17)

我现在不止一次通过Google发现这个问题,虽然我提出了另一种解决方案(IMO比使用预编译器和软件包更安全,更易于管理)。

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

  

他说的是什么......(他特别说这是针对javascript文件的,但是对于任何其他类型都可以这样做)source answer

以下是我的建议:

右键单击解决方案并创建一个名为Common Javascript Files新解决方案文件夹(或者您想要调用它的任何内容。

New Solution Folder

Common Javascript Files Solution Folder

右键单击解决方案,在Windows资源管理器中单击打开文件夹, 或者手动浏览其他版本的Visual Studio :(

Open Folder In Windows Explorer

在解决方案目录中,创建一个与解决方案文件夹同名的目录(解决方案文件夹通常不匹配源代码级别的目录,但这样做是出于理智的考虑)。

Common Javascript Files Directory

在此新目录中,添加需要在解决方案之间共享的文件。

Add Javascript Files To Directory

在Visual Studio中,单击解决方案文件夹,然后选择添加 - 现有项

Visual Studio Add - Existing Itme

在文件选择对话框中,导航到上一个创建的目录,选择添加到目录中的文件,然后单击添加

Select Files To Add

Solution Folder Files

在需要共享文件的每个项目中,右键单击项目(或项目中的目录),然后单击添加 - 现有项

Project Add Existing Item

导航至共享目录,选择文件并单击下拉箭头,然后单击添加为链接

Add As Link

现在,项目中的文件基本上是对解决方案文件夹中文件的快捷方式。但它们被视为项目中的实际文件(包括.CS或Visual Basic文件,它们将被编译为实际存在于项目中的文件)。

Linked Files

<强>赞成

  • 文件在设计时
  • 的项目中真正共享
  • 只能添加每个项目所需的文件,它不是全部或全部
  • 在IIS(虚拟目录等)中不需要任何配置
  • 如果解决方案在TFS源代码管理中,您可以将目录添加到TFS源,共享文件将受源代码控制。
  • 通过在项目中选择文件来编辑文件,将编辑实际文件。
  • 删除链接文件不会删除该文件。
  • 这不仅限于JS文件,链接文件可以是您可能需要的 ANY 文件(图像,Css,Xml,CS,CSHTML等)

<强> CONS

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

AND - 从另一个答案中窃取整合信息,以下是如何将这些信息输出以进行调试(取自下面的评论,link to blog post for build target for output for debugging

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

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

答案 1 :(得分:12)

三种方法:

  1. 使用版本控制系统分享Razor视图源代码
  2. 将视图编译为单独的DLL文件以进行二进制共享。
  3. 创建NuGet包
  4. 有关如何执行选项2的信息,请参阅 Compile your ASP.NET MVC Razor views into a separate DLL

    有关选项3,请参阅 Creating and Publishing a Package

    事实上,我认为这是关于如何编译Razor视图的原始文章: Precompile your MVC Razor views using RazorGenerator

答案 2 :(得分:0)

有更好的新选项(恕我直言)。 我会在ASP MVC Core中将优点组织为Feature splices,这将节省大量时间,我会分两步推荐它。< / p>

  1. 首先,整理 /将其置于名为Features拼接MSDN ref的区域。 将其连接起来,如文章所述,并做了很好的解释。

    // you're telling ASP that you've other Feature areas that it should look public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations) { // Error checking removed for brevity var controllerActionDescriptor = context.ActionContext.ActionDescriptor as ControllerActionDescriptor; string featureName = controllerActionDescriptor.Properties["feature"] as string; foreach (var location in viewLocations) { yield return location.Replace("{3}", featureName); } }

  2. 其次, 嵌入 功能 Shared projectPortable Libraries。我附上了链接 如何从R. Williams和MSDN做到这一点。

  3. 总之,由于您已将它放在公共区域,因此将其视为一项功能并将其嵌入portable lib or a Shared Project内。 R. Williams的一篇不错的文章。

    enter image description here