2015-10-13 48 views
1

今天我更新到TypeScript 1.6,並且現在CopyPipelineFiles任務在嘗試部署Web應用程序時失敗。在TypeScript 1.6升級後無法從VS2013(或TeamCity)部署

我在Web項目的設置中(通過csproj文件中的TypeScriptOutDir條目)將TypeScript的編譯的JavaScript輸出目錄重定向到scripts\compiled\,並且直到現在這一直運行良好。正在正確編譯Typescript文件並正確編譯目錄(即web項目目錄下的scripts\compiled\)。

但是,CopyPipelineFiles任務似乎對TypeScript文件的根目錄感到困惑,現在始終認爲它是Web項目的根目錄。因此,它將文件夾添加到不存在的路徑中,例如編譯scripts\foo.ts而不是抓取scripts\compiled\foo.js MSBuild正在查找\scripts\compiled\scripts\foo.js。我已經嘗試在輸出目錄中使用$(ProjectDir),並且我還嘗試將TypeScriptRootDir設置爲適當的根目錄(例如scripts\),但問題仍然存在。

我能夠解決這種情況的唯一方法是刪除輸出目錄,並允許編譯的JavaScript文件輸出到TypeScript對應位置的相同位置。

以下是我收到了真正的錯誤,在這裏將輸出文件的路徑將是scripts\account\app.ts的例子:

複製文件腳本編譯\ \腳本\帳戶\ app.js到OBJ \ Release \ AspnetCompileMerge \ Source \ scripts \ compiled \ scripts \ account \ app.js失敗。找不到路徑的一部分「腳本\編譯\腳本\帳戶\ app.js」

這可能發生在打字稿1.6所有本地的機器上安裝,以及安裝了1.6我們的TeamCity構建服務器。

回答

0

Filed a bug report with the TypeScript team and they've confirmed it.似乎是編譯器如何計算絕對路徑的問題。解決方法現在是爲兩個OUTDIR和ROOTDIR明確設置相對路徑,所以沿着此線的東西:

<PropertyGroup Condition="'$(Configuration)' == 'Debug'"> 
    <TypeScriptOutDir>Scripts\compiled</TypeScriptOutDir> 
</PropertyGroup> 
<PropertyGroup Condition="'$(Configuration)' == 'Release'"> 
    <TypeScriptOutDir>Scripts\compiled</TypeScriptOutDir> 
</PropertyGroup> 
<PropertyGroup> 
    <TypeScriptRootDir>Scripts\typescript</TypeScriptRootDir> 
</PropertyGroup> 

以我爲例,我剛搬到這兩個OUTDIR和ROOTDIR的屬性組沒有條件,因爲我不需要切換構建之間的outputDir,像這樣:

<PropertyGroup> 
    <TypeScriptRootDir>Scripts\typescript</TypeScriptRootDir> 
    <TypeScriptOutDir>Scripts\compiled</TypeScriptOutDir> 
</PropertyGroup>