我们最近升级到TS 0.9,之前工作正常的一些TS文件不再编译,我们得到:
TS5007:无法解析引用的文件:...
我该如何解决这个问题?
答案 0 :(得分:7)
我开始从我们的源代码中获取2个文件,我可以单独使用。
一个是定义文件(* .d.ts),另一个是定义文件中接口实现的普通文件。定义文件给出了上述错误。
然后我开始从定义文件中删除代码块,直到错误消失为止,我能够编译它。
这表明我在该文件的评论中存在问题,因为当我添加/删除某些评论时问题出现/消失。
我开始尝试评论的位置和内容,发现评论是在线还是在他们自己的行上并没有什么不同。但是,使用非ASCII字符的注释确实会引起问题!
有了这些信息,我去了Typescript codeplex页面报告错误,发现有人已经有了。
Cannot handle non-ASCII Unicode characters
所以现在的解决方案是不在代码中使用Unicode字符。
所以现在的解决方案是使用Unicode编码重新保存文件。
答案 1 :(得分:2)
我也遇到过这个问题,但它与编码无关。
如果在Visual Studio中有TypeScriptCompile
Build Action的文件太多,并且您在csproj Exec
或BeforeBuild
中使用自定义命令行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 \构建\ 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 \构建\ 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 "$(TypeScriptOutFile)"</TypeScriptBuildConfigurations>
<TypeScriptBuildConfigurations Condition="'$(TypeScriptOutDir)' != ''">$(TypeScriptBuildConfigurations) --outDir "$(TypeScriptOutDir)"</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 "$(TypeScriptMapRoot)"</TypeScriptBuildConfigurations>
<TypeScriptBuildConfigurations Condition="'$(TypeScriptSourceRoot)' != ''">$(TypeScriptBuildConfigurations) --sourceRoot "$(TypeScriptSourceRoot)"</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'" />
答案 2 :(得分:0)
我也遇到过这个问题。这个问题只出现在我使用Web Developer Tools安装Visual Studio 2015后,当我以前使用Visual Studio 2013时,一切正常。它现在将在VS2015中构建和工作,但如果我尝试在VS2013上构建它,则会抛出此错误。我最后只是将我的开发转移到了VS2015。