【问题标题】:Creating a project for web assets in Visual Studio 2013在 Visual Studio 2013 中为 Web 资产创建项目
【发布时间】:2015-04-22 09:34:59
【问题描述】:

我有多个使用多个相似样式/脚本的 ASP.NET MVC5 项目,我认为,为了维护,最好在 Visual Studio 2013 中有一个单独的项目,其中包含 LESS 样式表和 JavaScript 文件,这些文件可以两者共享。

我的设置如下:

Web.Project1
Web.Project2
Web.Assets //would contain LESS/JS files
Resources
Domain
Data

任何指针?

我一直在考虑添加为链接,但我不确定这是否能满足我的需要。

【问题讨论】:

  • 也许能够添加对项目的引用并包含它。为什么这比将文件包含在文件夹中更易于维护?也不知道这将如何与脚本和 css 的整个捆绑一起发挥作用
  • 我可能会考虑创建一个提供静态内容的网站。 static.example.com
  • @Nick - 任何样式更改都需要反映在两个站点上,因此有一个会影响两者的编辑会更简单。我认为this question 与我的相似,我将试一试。我会回复你的。
  • 如何为该内容创建 NuGet 包。您可以将包部署到共享文件夹并配置 VS 以从那里获取包。
  • 我同意@JesúsLópez。我们在过去实施了相同的做法,我们有许多使用相同资产集的内部业务 Web 应用程序。我们为这些资产创建了一个 NuGet 包,并且可以在一个位置轻松管理它们。然后,随着资产的更新/添加/等,部署新版本的软件包并使用该软件包更新那些应用程序。该包最终会将资产放置在使用项目中的正确文件夹中。像魅力一样工作。

标签: c# asp.net asp.net-mvc visual-studio visual-studio-2013


【解决方案1】:

我最近为我的一个项目经历了这个过程,并得出结论,如果您的目标只是通过保持代码 DRY 来避免重复,那么使用链接文件效果很好。

这很简单,但我还是会写下来,因为它可能会节省一些时间。

快速总结

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

详细解释如下:

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

** 请注意,如果您只是要将文件直接从一个项目共享到一个或多个其他项目,那么您可以跳过此步骤。

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

\MySolution
   \Common
      \Images
      \Scripts
      \Styles

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

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

将共享资源添加为链接

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

您可能会收到有关添加项目目录结构之外的文件的源代码控制警告,但可以忽略此问题,因为链接的文件将在其源代码中受源代码控制。

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

当您将应用程序发布到服务器时,链接的文件将复制到它们所链接的项目文件夹中,并且一切都按预期工作。但是,在开发环境中,链接文件实际上并不位于项目文件夹中。所以当你在 VS 中按 F5 测试你的应用程序时,共享资源将会丢失。

简单的解决方案是添加一个 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

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

【讨论】:

    猜你喜欢
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多