2014-06-20 14 views
19

Mam aplikację internetową MVC 5.1, w której ostatnio zacząłem używać TypeScript. Chcę użyć sourcemapping, więc umieściłem oba pliki .ts, .js i .js.map w projekcie.Jak dołączyć pliki TypeScript podczas publikowania?

Kiedy publikuję aplikację (na przykład do systemu plików lub Azure), kopiowane są tylko pliki .js i .js.min, a nie plik .ts. Oznacza to, że nie dostaję mapowania źródła na opublikowanej stronie.

Plik TypeScript zawiera "Build Action": "TypeScriptCompile", a ja przetestowałem "Copy to Output Directory" zarówno przy "Nie kopiuj" i "Kopiuj zawsze", nadal plik .ts nie jest publikowany.

Jak mogę dołączyć pliki .ts podczas publikowania mojej aplikacji?

(używam VS2013 aktualizacji 2 z maszynopis 1.0.1 i Web Essentials 2013 do aktualizacji 2)

Odpowiedz

30

Osiągnąłem to przez edycję pliku projektu (csproj). I zawarte .TS (są one przechowywane w TypeScriptCompile Element) pliki do Treści artykuł tj

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

Uwaga: Ze względu na stan, obejmuje treść maszynopis tylko dla konfiguracji Debug kompilacji.

+1

Niestety, pliki .ts wciąż nie są kopiowane podczas publikowania projektu. –

+5

@GeirSagberg upewnij się, że publikujesz konfigurację "Debugowanie". Lub po prostu usuń Condition = "$ (Konfiguracja)" == 'Debugowanie' " –

+1

Hehe, to mi się udało, moje złe :) –

0

pierwsze, można rzucić okiem na opublikowanej katalogu, aby sprawdzić, czy pliki są tam. można odtworzyć to lokalnie z MSBuild:

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

Po wykonaniu tego polecenia, można wyszukać swoje .TS pliki w folderze:

outputFolder/_bin/PublishedWebsites/YourProjectName/ 

Wszystkie wyjścia projektu są kopiowane do wyjścia katalog podczas wykonywania zadania MSBuild "CopyFilesToOutputDirectory".

Jeśli po uruchomieniu polecenia MSBuild pliki .ts oznaczone jako "Copy Always" lub "Copy If Newer" nadal nie są kopiowane, istnieje duże prawdopodobieństwo, że plik projektu nie zaimportuje wspólnego pliku celów dostarczonego przez firmę Microsoft , w którym zdefiniowano zadanie "CopyFilesToOutputDirectory".

W takim przypadku należy edytować plik .csproj, dodając klauzulę import do odpowiedniego pliku, jak poniżej:

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

Spróbuj uruchomić polecenie MSBuild ponownie po Microsoft.WebApplication.targets został przywieziony, a pliki oznaczone do opublikowania powinny znajdować się w folderze wyjściowym.

+0

Pliki .ts są kopiowane do katalogu wyjściowego, ale nie do podkatalogu PublishedWebsites/ProjectName/....Mam klauzulę importu w moim pliku .csproj ... –

+0

Aby odtworzyć: 1. Utwórz nowy projekt aplikacji sieci Web (MVC). 2. Dodaj plik maszynopis "file1.ts" za pomocą "console.log (" Hello world ")", oznacz jako "Copy Always". 3. Opublikuj w pliku. 4. Zauważ, że kopiowany jest tylko plik "file1.js". Podejrzewam, że ma to coś wspólnego z kompilatorem maszynopisu. –

1

Na podstawie Stas Berkov's answer warunkowo dołączam pliki .ts tylko wtedy, gdy generowane są mapy źródłowe (zgodnie z konfiguracją w zakładce TypeScript Build właściwości projektu).

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

Podałem to jako ostatni element w <Project> pliku .csproj.

Powiązane problemy