c# - 如何跨 MVC 站点共享通用样式信息(css、图像等)?

标签 c# css tfs asp.net-mvc-4 visual-studio-2012

跨多个 MVC 元素共享功能非常简单。您只需将代码放入其自己的元素中,并在您想要的尽可能多的解决方案中引用它。干净、标准、光荣。

有什么方法可以为样式代码做到这一点吗?我希望将我们常用的 CSS 文件(使我们的应用程序具有相似外观的文件)放在一个地方。现在我必须为每个新应用程序生成新副本。因此,如果需要修复某些东西,则需要在十几个地方修复十几次。

有没有其他人处理过这个?我无法将 CSS 文件分离到它们自己的元素中,我也真的不希望有一个 只是 css 的 Web 应用程序位于某处,以便所有应用程序都可以通过完全限定的方式远程使用这些文件网址。您可以使用源代码管理将文件链接在一起的 TFS 技巧吗?有什么我没有想到的吗?

最佳答案

这是在不使用 CDN、LESS、SASS、NuGet 等的情况下在元素之间共享 Web 资源的“非常简单”的解决方案:

  1. 创建包含要共享的资源的通用解决方案文件夹,或者简单地指定其中一个元素为主。
  2. 使用“添加为链接”根据需要将共享资源文件添加到每个元素。
  3. 向每个元素文件添加一个AfterBuild 任务,将链接的文件复制到元素文件夹。只有这样,Visual Studio 测试/调试 (F5) 才能在本地运行。

如果您需要有关如何执行此操作的详细信息,请继续阅读。

为共享资源配置解决方案文件夹

** 请注意,如果您只是想将文件直接从一个元素共享到一个或多个其他元素,则可以跳过此步骤。

Visual Studio 解决方案文件夹不必反射(reflect)物理文件系统文件夹,但这样做有助于保持理智。因此,首先在本地文件系统上创建文件夹并将资源文件复制到其中。新文件夹应位于您的解决方案文件夹下。例如:

\MySolution
   \Common
      \Images
      \Scripts
      \Styles

返回 Visual Studio,右键单击Solution Items 文件夹并使用Add Solution Folder 复制新的文件系统文件夹。

接下来,通过右键单击每个文件夹并使用添加现有项 添加文件夹的内容,将文件添加到新的解决方案文件夹。

将共享资源添加为链接

对于将使用共享资源的每个元素,右键单击元素文件夹并选择添加现有项。浏览到公共(public)文件夹,选择所需的文件,单击“添加”按钮旁边的下拉箭头并选择“添加为链接”。

您可能会收到有关添加元素目录结构之外的文件的源代码管理警告,但这可以忽略,因为链接文件将在其源代码下受到源代码管理。

添加一个 AfterBuild 任务来复制文件

当您将应用程序发布到服务器时,链接的文件将复制到它们所链接到的元素文件夹中,并且一切都按预期进行。但是,在开发环境中,链接文件实际上并不驻留在元素文件夹中。因此,当您按 F5 键在 VS 中测试您的应用程序时,共享资源将会丢失。

简单的解决方案是添加一个 MSBuild 任务,以便在每次构建后从其源复制链接文件。这需要为包含共享资源链接的每个元素完成。

右键单击元素并选择卸载元素。再次右键单击元素并选择 Edit 。滚动到底部并添加以下内容(就在“”上方):

  <Target Name="AfterBuild">
    <!-- Copy linked content files to local folders so that they are available in the debugger. 
         This is only an issue when running the application locally. The linked files should 
         be automatically published to the correct folder when publishing to a web server. -->
    <Copy SourceFiles="%(Content.Identity)"
          DestinationFiles="%(Content.Link)"
          SkipUnchangedFiles='true'
          OverwriteReadOnlyFiles='true'
          Condition="'%(Content.Link)' != ''" />
  </Target>

** 复制任务改编自 this link在 TheCodeDestroyer 的回答中。

保存元素文件,然后右键单击并选择重新加载元素

关于c# - 如何跨 MVC 站点共享通用样式信息(css、图像等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13978643/

相关文章:

html - Google 网络字体 (css) 与 photoshop 中的不同

reporting-services - 如何获取 SSAS(或任何其他报告)中两个 TFS 工作项状态之间的时间?

tfs - 可以从以前的变更集创建分支吗?

html - 带有 float 图像的段落、列表、 block 引用

html - 在某些移动设备上图像会消失

TFS 和存储二进制文件

c# - 在 ASP.NET 中上传文件时,超出最大请求长度

c# - 无法让 SignalR Hub 变量停止丢失值(静态变量不是问题)

c# - 剪刀石头布的胜率百分比不起作用?

c# - AppDomain,运行程序集 .exe 或 .dll?