【问题标题】:How can I build TypeScript as a project separate to, and dependent on, an MVC project, and copy the generated JavaScript into the MVC project?如何将 TypeScript 构建为独立于 MVC 项目并依赖于 MVC 项目的项目,并将生成的 JavaScript 复制到 MVC 项目中?
【发布时间】:2014-05-23 03:32:57
【问题描述】:

构图

我有一个 MVC 项目,其中包含最终通过 ajax 等进行序列化和使用的 C# 类。我使用 TypeLite 生成这些 C# 类的定义(讨论了 TypeLite 的替代方案here),因此我可以在编译时检查使用这些 json 序列化 C# 类的代码。这样,如果 C# 定义发生更改而我的 TypeScript 代码没有更改,我将收到编译时错误,因为它直接与 C# 定义绑定

最初的问题

目前我的 TypeScript 与我的 C# 类存在于同一个项目中。所以我有一个非常奇怪的循环依赖问题。为了解决这个问题,我必须遵循一个非常特殊的模式

  1. 更新 C# 类
  2. 编译 MVC 项目
  3. 运行 TypeLite,生成定义
  4. 更新 TypeScript 或在下次构建时遇到编译错误。

我不喜欢这样,因为我无法在构建过程中自动运行 TypeLite。我不能这样做,因为 TypeLite 需要首先构建 MVC 项目中的 C# 程序集才能运行并访问定义。另外,我必须将生成的定义包含在代码存储库中,我不喜欢这样做,因为它生成的代码并且有人可能会忘记生成它并提交它/签入它。

建议的解决方案

如果我有一个依赖于我的 MVC 项目的 TypeScript 项目,我可以轻松打破这种循环依赖。这样我就可以在构建中包含 TypeLite,方法是将其从 MVC 项目中删除并将其放置在 TypeScript 项目中。

这种方法对我来说非常正确,因为 TypeScript 项目是一个单独的编译项目,它依赖于在它自己的项目之前构建的程序集。

实际问题/疑问

不幸的是,我不知道如何在我的 MVC 项目之外有一个 TypeScript 项目,该项目构建然后将生成的 JavaScript 复制回 MVC 项目(通过 web 部署和/或 azure web 角色部署进行部署)。 那么,我将如何拥有一个与我的 MVC 项目分开的 TypeScript 项目,该项目在 MVC 项目之后构建,然后将生成的 JavaScript 复制回 MVC 项目以进行部署?

【问题讨论】:

    标签: asp.net-mvc build typescript webdeploy typelite


    【解决方案1】:

    那么,我将如何拥有一个独立于 MVC 项目的 TypeScript 项目,该项目在 MVC 项目之后构建,然后将生成的 JavaScript 复制回 MVC 项目以进行部署?

    您可以使用以下语句将文件夹中的所有 TS / JS 文件包含到.csproj 等中:

    <Content Include="src\**\*.*">
    </Content>
    

    然后使用 grunt-ts : https://github.com/grunt-ts/grunt-ts 之类的东西在外部管理编译这些文件

    另外的优势:你的队友可以使用他们喜欢的任何编辑器来进行 TS,而不受 VS 的束缚。也可以帮助您的设计师。

    【讨论】:

    • 巴萨拉特,很高兴收到您的来信!我需要关注你的 youtube 视频。我完全忘记了使用 grunt!由于这里的每个开发人员都使用 VS,而我们使用 TFS 进行构建,所以我想要一些可以集成到 MSBuild 中的东西。因此,我将考虑将 grunt-ts 集成到 msbuild 构建中。是否有任何类型的 *.*proj 文件可以与 grunt / grunt-ts 一起使用?到目前为止,我已经尝试过删除 csproj 并放入必要的目标以使其构建 .js 文件。到目前为止,这是我最喜欢的两条线索。
    • 找到一篇关于 grunt-ts 和 Visual Studio 的好文章! joeriks.com/2013/08/06/… 有了这个,我可以在我的 MVC 项目中包含 TypeScript,并通过 grunt 和后期构建任务来构建它们。这将解决复制文件的问题。只要我不在 csproj 中包含 .targets 文件,它就不会尝试构建 TypeScript(将其留给 grunt-ts)
    【解决方案2】:

    我使用 typelite 的时间很短,我所做的是:

    1. 将 typelite dll 引用到写入我的实体的位置(我假设您有一个放置所有实体的 dll)。

    2. 进入我的 WWW 项目(在我的例子中它引用了实体 dll)并创建了一个 tt 文件来创建 ts 文件。 tt 文件导入 dll 并完成它的工作。

    当我编译我的 WWW 网站时,实体项目被编译并且 .ts 文件被重新生成。 .ts 文件正是我希望它们放置的位置,一切正常。

    【讨论】:

      【解决方案3】:

      当 TypeScript 编译器无法处理大量源文件时,我们使用了一种非常简单的方法: 在 MVC 项目的子目录下创建一个 typescript 项目: 因此,如果您的 MVC 结构如下所示:

      \Content
      \Controllers
      \Scripts
      

      创建一个 TypeScript 项目
      \Content\tscode\TypeScriptProject.sln.
      

      在你的 typescript 项目中,你可以引用项目根目录下的文件:

      /// <reference path="../../../Scripts/typings/jasmine/jasmine.d.ts"/>
      

      然后您应该能够设置构建定义以在 TypeScript 之前构建 MVC。
      希望这会有所帮助。

      【讨论】:

      • 这是一个非常有趣的方法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      相关资源
      最近更新 更多