I also ran into this problem, however it had nothing to do with coding.
If you have too many files with TypeScriptCompile Build Actions in Visual Studio, and you use the custom Exec command line in your csproj BeforeBuild or AfterBuild , you can see the same โcannot resolve the linked fileโ.
If you have too many files or many files with relatively long paths (myproj / scripts / reallylongfoldername / reallylongilename.ts), they cannot fit into command line arguments. Look carefully at the error. For me, just adding a new file.ts project to the project caused an error:
Cannot resolve the reference file: C: \ Path \ To \ Project \ scripts \ file.s
This is not a typo above. The compiler actually removed โtโ from โfile.tsโ to match the command line, and since the file โfile.sโ does not exist, I got an error.
The solution was to add a custom build target. I only ran into this problem after installing Visual Studio 2013, as it wants all definition files to have Type BuildCompile Build Action. So I just copied these 2 files to the Build folder under my solution:
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 \ Building \ 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>
Then I modified the csproj file of the project, which stores all these typescript files. Place the following line in front of the line <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> (near the top of the file):
<Import Project="..\Build\Microsoft.TypeScript.Default.props" />
Then put the following on the right after the line <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> (near the bottom of the file):
<Import Project="..\Build\Microsoft.TypeScript.targets" />
This will build typescript in both VS 2012 and 2013. You can also add a condition condition for each import if you have a special assembly configuration for building 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'" />