4

我已经用 TypeScript 重写了我的 javascript 框架项目。现在我正在尝试在许多其他 Web 项目中使用这些文件。

我已经尝试将它们链接(链接文件)到网络项目中。我注意到的第一件事是,我无法将 Build Action 更改为“TypeScriptCompile”。.ts 文件在其源文件夹中编译,而不是在它们链接的位置。问题是在 Web 项目中创建新文件 .ts 文件时,它看不到链接文件,并且出现 TypeScript 错误。

此外,每次我尝试使用 Linked TypeScript Files 构建项目时,它都会使 Visual Studio 崩溃。

我正在使用 AMD 和 RequireJS。结构需要得到尊重。我将 baseURL 设置为 /Scripts/ 并且我的框架和 TS 文件需要位于该结构中。

有人有什么主意吗 ?


这是我正在尝试的示例

来自框架项目的链接文件的内容:

export class Log {
  static error (msg: string) { console.log(msg); }
}

使用链接文件的 Web 项目中的文件内容:

import fw = module('linkedFile');
fw.Log.error('this file can\'t find the linked file, so this code won\t work');

谢谢 !

更新: 到目前为止,我发现的唯一方法是将框架文件从源项目复制到我在 Post Build 上的 Web 项目中:

xcopy /y /e /s /d "$(ProjectDir)Scripts\." "$(ProjectDir)..\..\OtherProject\Scripts\."

这样做的问题是我们必须在第一个项目中编辑框架文件,否则我们的更改将被覆盖。

更新 2: 我目前正在使用此脚本自动复制项目中的所有链接文件。您需要编辑您的 CSPROJ 文件,并且它必须是一个 WEB 项目。检查链接以获取完整说明:

http://consultingblogs.emc.com/jamesdawson/archive/2008/06/03/using-linked-files-with-web-application-projects.aspx?CommentPosted=true#commentmessage

  <!-- ======================== -->
  <!-- Copy linked files -->
  <Target Name="_CopyLinkedContentFiles">
    <!-- Remove any old copies of the files -->
    <Delete Condition=" '%(Content.Link)' != '' AND Exists('$(WebProjectOutputDir)\%(Content.Link)') " Files="$(WebProjectOutputDir)\%(Content.Link)" />
    <!-- Copy linked content files recursively to the project folder -->
    <Copy Condition=" '%(Content.Link)' != '' " SourceFiles="%(Content.Identity)" DestinationFiles="$(WebProjectOutputDir)\%(Content.Link)" />
  </Target>
  <!-- Override the default target dependencies to -->
  <!-- include the new _CopyLinkedContentFiles target. -->
  <PropertyGroup>
    <PrepareForRunDependsOn>
      $(PrepareForRunDependsOn);
      _CopyWebApplication;
      _CopyLinkedContentFiles;
      _BuiltWebOutputGroupOutput
    </PrepareForRunDependsOn>
  </PropertyGroup>
  <PropertyGroup>
    <!-- <PostBuildEvent>$(MSBuildBinPath)\msbuild.exe "$(ProjectDir)_build\site.xml"</PostBuildEvent> -->
  </PropertyGroup>
  <!-- ======================== -->
4

1 回答 1

1

当您链接文件时,路径仍然与其实际位置相关,因此您必须使用一大堆 ../../../ 才能到达那里。

一种选择是将文件设置为在构建时复制,以便将其复制到您的 bin 文件夹中。我这样做是为了测试,而不是为了可发布的代码。

另一种选择是打包您的模块,以便更容易使用特定版本。您可以使用私有 NuGet 存储库来执行此操作。

于 2013-07-27T19:00:36.340 回答