2014-06-20 54 views
19

我有一個最近開始使用TypeScript的MVC 5.1 Web應用程序。我想使用sourcemapping,所以我在項目中包含了.ts,.js和.js.map文件。如何在發佈時包含TypeScript文件?

當我發佈應用程序(例如文件系統或Azure)時,只複製.js和.js.min文件,而不復制.ts文件。這意味着我沒有在發佈的網站上獲得源映射。

TypeScript文件具有「Build Action」:「TypeScriptCompile」,並且我已經測試過「不要複製」和「總是複製」的「複製到輸出目錄」,仍然不會發布.ts文件。

如何在發佈我的應用程序時包含.ts文件?

(我使用VS2013更新2打字稿1.0.1和Web要點2013年更新2)

回答

30

我通過編輯項目(csproj)文件實現了這一點。我包括.TS(它們存儲在TypeScriptCompile項)文件到內容項即

<Target Name="AddTsToContent" AfterTargets="CompileTypeScript" Condition="'$(BuildingProject)' != 'false'"> 
    <ItemGroup> 
     <Content Include="@(TypeScriptCompile)" Condition="'$(Configuration)'=='Debug'"/> 
    </ItemGroup> 
    </Target> 

注意:由於條件的,這包括僅用於Debug構建配置的打字稿內容。

+1

不幸的是,在發佈項目時,.ts文件仍然沒有被複制。 –

+5

@GeirSagberg確保你發佈'調試'配置。或者只是刪除條件=「'$(配置)'=='調試'」 –

+1

嘿嘿,這個伎倆,我的壞:) –

0

首先,你可以看看你的發佈目錄,看看文件是否存在。 您可以用本地的MSBuild重現此:

msbuild path/to/your/solution.sln-or-project.csproj /p:OutputPath=path/to/outputFolder /p:Configuration=Release 

運行該命令後,您可以在文件夾中搜索您的.ts文件:

outputFolder/_bin/PublishedWebsites/YourProjectName/ 

一個項目的所有輸出都複製到輸出目錄執行MSBuild任務「CopyFilesToOutputDirectory」。

如果在運行MSBuild命令後,標記爲「始終複製」或「如果較新複製」的.ts文件仍未被複制,那麼您的項目文件不會導入Microsoft提供的公共目標文件,其中定義了「CopyFilesToOutputDirectory」任務。

在這種情況下,編輯您的.csproj文件,添加一個import子句相應的文件,如下圖所示:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" /> 

嘗試Microsoft.WebApplication.targets後再次被導入運行的MSBuild命令,並且標記爲要發佈的文件現在應該位於輸出文件夾中。

+0

.ts文件被複制到輸出目錄,但不復制到PublishedWebsites/ProjectName/...子目錄。我的.csproj中有import子句... –

+0

重現:1.創建一個新的Web應用程序項目(MVC)。 2.用'console.log(「Hello world」)'添加打印文件「file1.ts」,標記爲「始終複製」。 3.發佈到文件。 4.請注意,只有「file1.js」被複制。我懷疑這與打字稿編譯器有關。 –

1

根據Stas Berkov's answer,我僅在生成源地圖(如在項目屬性的TypeScript Build選項卡中配置)時纔有條件地包括.ts文件。

<Target Name="AddTsToContent" AfterTargets="CompileTypeScript" Condition="'$(BuildingProject)' != 'false'"> 
    <ItemGroup> 
    <Content Include="@(TypeScriptCompile)" Condition="'$(TypeScriptSourceMap)' == 'true'"/> 
    </ItemGroup> 
</Target> 

我在.csproj文件<Project>放在這個作爲最後一個元素。

相關問題