4

我们最近升级到 TS 0.9,一些以前运行良好的 TS 文件不再编译,我们得到:

TS5007:无法解析引用的文件:...

我怎样才能解决这个问题?

4

3 回答 3

7

我首先从我们的源中获取了 2 个可以单独使用的文件。

一个是定义文件 (*.d.ts),另一个是包含定义文件中接口实现的普通文件。定义文件给出了上述错误。

然后我开始从定义文件中删除代码块,直到错误消失并且我能够编译它。

这向我表明该文件中的评论存在问题,因为当我添加/删除某些评论时问题出现/消失。

我开始试验评论的位置和内容,发现评论是在行内还是在他们自己的行上并没有什么不同。然而,非 ASCII 字符的注释确实导致了这个问题!

有了这些信息,我去了 Typescript codeplex 页面报告了这个错误,发现有人已经有了。

无法处理非 ASCII Unicode 字符

因此,目前的解决方案是不要在代码中使用 Unicode 字符。

因此,目前的解决方案是使用 Unicode 编码重新保存文件。

TypeScript 0.9 - 找不到文件

于 2013-06-19T10:40:58.070 回答
2

我也遇到了这个问题,但是它与编码无关。

TypeScriptCompile如果您在 Visual Studio 中使用构建操作的文件过多,并且您Exec在 csprojBeforeBuild或中使用自定义命令行AfterBuild,您可能会看到相同的“无法解析引用的文件”错误。

如果您有太多文件,或者有很多路径相对较长的文件(myproj/scripts/reallylongfoldername/reallylongilename.ts),它们就不能全部放入命令行参数中。仔细查看错误。对我来说,只需在项目中添加一个新file.ts的就会导致错误:

无法解析引用的文件:C:\Path\To\Project\scripts\file.s

这不是上面的错字。编译器实际上从“file.ts”中删除了“t”以使其适合命令行,并且由于文件“file.s”不存在,我得到了错误。

解决方案是添加自定义构建目标。我在安装 Visual Studio 2013 后才遇到这个问题,因为它希望所有定义文件都有一个 TypeScriptCompile Build Action。所以我只是将这两个文件复制到我的解决方案下的 Build 文件夹中:

SolutionFolder\Build\Microsoft.TypeScript.Default.props

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <TypeScriptRemoveComments>false</TypeScriptRemoveComments>
    <TypeScriptNoImplicitAny>false</TypeScriptNoImplicitAny>
    <TypeScriptNoResolve>false</TypeScriptNoResolve>
    <TypeScriptGeneratesDeclarations>false</TypeScriptGeneratesDeclarations>
    <TypeScriptModuleKind>amd</TypeScriptModuleKind>
    <TypeScriptOutFile></TypeScriptOutFile>
    <TypeScriptOutDir></TypeScriptOutDir>
    <TypeScriptSourceMap>true</TypeScriptSourceMap>
    <TypeScriptMapRoot></TypeScriptMapRoot>
    <TypeScriptSourceRoot></TypeScriptSourceRoot>
    <TypeScriptTarget>ES5</TypeScriptTarget>
    <TypeScriptAdditionalFlags></TypeScriptAdditionalFlags>
    <TypeScriptEnableCompileOnSave>true</TypeScriptEnableCompileOnSave>
  </PropertyGroup>
</Project>

SolutionFolder\Build\Microsoft.TypeScript.targets

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <VsToolsPath Condition="'$(VsToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VsToolsPath>
  </PropertyGroup>

  <UsingTask TaskName="TypeScript.Tasks.VsTsc" AssemblyFile="$(VSToolsPath)\TypeScript\TypeScript.tasks.dll" />

  <PropertyGroup>
    <CompileDependsOn>
      CompileTypeScript;
      $(CompileDependsOn);
    </CompileDependsOn>
  </PropertyGroup>

  <PropertyGroup>
    <PublishPipelineCollectFilesCore>
      $(PublishPipelineCollectFilesCore);
      TypeScriptCollectPublishFiles;
    </PublishPipelineCollectFilesCore>
  </PropertyGroup>

  <PropertyGroup Condition="'$(TypeScriptBuildConfigurations)' == ''">
    <TypeScriptCompileOnSaveEnabled Condition="'$(TypeScriptEnableCompileOnSave)' != 'false'">true</TypeScriptCompileOnSaveEnabled>
    <PreferredUILang Condition="'$(BuildingInsideVisualStudio)' == 'true' and '$(PreferredUILang)' == ''">$([System.Globalization.CultureInfo]::CurrentUICulture.Name)</PreferredUILang>

    <TypeScriptBuildConfigurations Condition="'$(TypeScriptRemoveComments)' == 'true'">$(TypeScriptBuildConfigurations) --removeComments</TypeScriptBuildConfigurations>
    <TypeScriptBuildConfigurations Condition="'$(TypeScriptNoImplicitAny)' == 'true'">$(TypeScriptBuildConfigurations) --noImplicitAny</TypeScriptBuildConfigurations>
    <TypeScriptBuildConfigurations Condition="'$(TypeScriptNoResolve)' == 'true'">$(TypeScriptBuildConfigurations) --noResolve</TypeScriptBuildConfigurations>
    <TypeScriptBuildConfigurations Condition="'$(TypeScriptGeneratesDeclarations)' == 'true'">$(TypeScriptBuildConfigurations) --declaration</TypeScriptBuildConfigurations>
    <TypeScriptBuildConfigurations Condition="'$(TypeScriptModuleKind)' != ''">$(TypeScriptBuildConfigurations) --module $(TypeScriptModuleKind)</TypeScriptBuildConfigurations>
    <TypeScriptBuildConfigurations Condition="'$(TypeScriptOutFile)' != ''">$(TypeScriptBuildConfigurations) --out &quot;$(TypeScriptOutFile)&quot;</TypeScriptBuildConfigurations>
    <TypeScriptBuildConfigurations Condition="'$(TypeScriptOutDir)' != ''">$(TypeScriptBuildConfigurations) --outDir &quot;$(TypeScriptOutDir)&quot;</TypeScriptBuildConfigurations>
    <TypeScriptBuildConfigurations Condition="'$(TypeScriptSourceMap)' == 'true'">$(TypeScriptBuildConfigurations) --sourcemap</TypeScriptBuildConfigurations>
    <TypeScriptBuildConfigurations Condition="'$(TypeScriptTarget)' != ''">$(TypeScriptBuildConfigurations) --target $(TypeScriptTarget)</TypeScriptBuildConfigurations>
    <TypeScriptBuildConfigurations Condition="'$(TypeScriptNoResolve)' == 'true'">$(TypeScriptBuildConfigurations) --noResolve</TypeScriptBuildConfigurations>
    <TypeScriptBuildConfigurations Condition="'$(TypeScriptAdditionalFlags)' != ''">$(TypeScriptBuildConfigurations) $(TypeScriptAdditionalFlags)</TypeScriptBuildConfigurations>
    <TypeScriptBuildConfigurations Condition="'$(TypeScriptMapRoot)' != ''">$(TypeScriptBuildConfigurations) --mapRoot &quot;$(TypeScriptMapRoot)&quot;</TypeScriptBuildConfigurations>
    <TypeScriptBuildConfigurations Condition="'$(TypeScriptSourceRoot)' != ''">$(TypeScriptBuildConfigurations) --sourceRoot &quot;$(TypeScriptSourceRoot)&quot;</TypeScriptBuildConfigurations>
    <TypeScriptBuildConfigurations Condition="'$(TypeScriptCodePage)' != ''">$(TypeScriptBuildConfigurations) --codepage $(TypeScriptCodePage)</TypeScriptBuildConfigurations>
    <TypeScriptBuildConfigurations Condition="'$(PreferredUILang)' != ''">$(TypeScriptBuildConfigurations) --locale $(PreferredUILang)</TypeScriptBuildConfigurations>
  </PropertyGroup>

  <PropertyGroup>
    <TscToolPath Condition="'$(TscToolPath)' == ''">$(MSBuildProgramFiles32)\Microsoft SDKs\TypeScript</TscToolPath>
    <TscToolExe Condition="'$(TscToolExe)' == ''">tsc.exe</TscToolExe>
    <TscYieldDuringToolExecution Condition="'$(TscYieldDuringToolExecution)' == ''">true</TscYieldDuringToolExecution>
  </PropertyGroup>

  <ItemGroup>
    <PropertyPageSchema Include="$(MSBuildThisFileDirectory)\$(LangName)\TypeScriptProjectProperties.xaml;">
      <Context>Project;BrowseObject</Context>
    </PropertyPageSchema>
  </ItemGroup>

  <ItemGroup>
    <ProjectCapability Include="TypeScript" />
  </ItemGroup>

  <Target Name="CompileTypeScript" Condition="'$(BuildingProject)' != 'false'">
    <VsTsc
      ToolPath="$(TscToolPath)"
      ToolExe="$(TscToolExe)"
      Configurations="$(TypeScriptBuildConfigurations)"
      FullPathsToFiles="@(TypeScriptCompile)"
      YieldDuringToolExecution="$(TscYieldDuringToolExecution)"
      OutFile="$(TypeScriptOutFile)"
      OutDir="$(TypeScriptOutDir)"
      >
      <Output TaskParameter="GeneratedJavascript" ItemName="GeneratedJavascript" />
    </VsTsc>
  </Target>

  <Target Name="TypeScriptCollectPublishFiles">
    <Message Text="Adding to FilesForPackagingFromProject: @(GeneratedJavascript->'%(Identity)')"/>
    <ItemGroup>
      <FilesForPackagingFromProject Include="@(GeneratedJavascript->'%(Identity)')"/>
    </ItemGroup>
  </Target>

</Project>

然后我修改了包含所有这些打字稿文件的项目的 csproj 文件。将以下内容放在该<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />行之前(靠近文件顶部):

<Import Project="..\Build\Microsoft.TypeScript.Default.props" />

然后将以下内容放在该<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />行之后(靠近文件底部):

<Import Project="..\Build\Microsoft.TypeScript.targets" />

这将在 VS 2012 和 2013 中构建打字稿。如果有用于构建 ts 的特殊构建配置,您还可以为每个导入添加条件子句:

<Import Project="..\Build\Microsoft.TypeScript.Default.props" Condition="'$(Configuration)' == 'DebugBuildTs' Or '$(Configuration)' == 'Release'" />
<Import Project="..\Build\Microsoft.TypeScript.targets" Condition="'$(Configuration)' == 'DebugBuildTs' Or '$(Configuration)' == 'Release'" />
于 2013-12-04T00:05:24.553 回答
0

我也遇到了这个问题。此问题仅在我使用 Web 开发人员工具安装 Visual Studio 2015 后出现,而我之前使用的 Visual Studio 2013 一切正常。它现在可以在 VS2015 中构建和工作,但是如果我尝试在 VS2013 上构建它会抛出这个错误。我最终只是将我的开发转移到了 VS2015。

于 2016-04-05T19:53:21.583 回答