发布时如何包含TypeScript文件?

问题描述 投票:22回答:4

我有一个MVC 5.1 Web应用程序,我最近开始使用TypeScript。我想使用sourcemapping,所以我在项目中包含了.ts,.js和.js.map文件。

当我发布应用程序(例如文件系统或Azure)时,只复制.js和.js.min文件,而不是.ts文件。这意味着我没有在已发布的网站上获得源映射。

TypeScript文件具有“构建操作”:“TypeScriptCompile”,我已经使用“不复制”和“始终复制”测试了“复制到输出目录”,但仍未发布.ts文件。

发布应用程序时如何包含.ts文件?

(我使用VS1013 Update 2和TypeScript 1.0.1以及Web Essentials 2013 for Update 2)

deployment visual-studio-2013 typescript asp.net-mvc-5.1
4个回答
34
投票

我通过编辑项目(csproj)文件实现了这一点。我将.ts(它们存储在TypeScriptCompile项目中)文件包含在Content项目中,即

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

注意:由于条件,这包括仅适用于Debug构建配置的TypeScript内容。


2
投票

基于Stas Berkov's answer,我有条件地在生成源地图时包含.ts文件(在项目属性的TypeScript Build选项卡中配置)。

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

我把它放在<Project>文件的.csproj中的最后一个元素。


1
投票

首先,您可以查看已发布的目录以查看文件是否存在。您可以使用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
投票

找到这个帖子,@ StanislavBerkov的解决方案完美地发布了包括ts-files的发布。当通过Octopus部署部署我们的解决方案时,我们开始遇到问题,但没有再添加ts-files

在我们的构建服务器上检查了我们的msbuild命令并添加了一个输出路径。

& "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\msbuild.exe" "C:\Users\MyUser\Documents\Project\Solution\solution.sln" /t:"Clean;Build" /p:Configuration=Release /p:OutputPath="C:\Users\MyUser\Documents\Project\outputFolder" /p:AllowedReferenceRelatedFileExtensions=none /p:RunOctoPack=true /p:OctoPackEnforceAddingFiles=true /p:OctoPackNuGetProperties="env=Test;change=TestChange"

在outputFolder中查看_PublishedWebsites所有.ts-files都存在。然而,看看由Octopack生成的生成的.nupkg文件,所有ts-files都消失了!显然,Octopack不包含TypeScript文件。

https://help.octopus.com/t/octopack-doesnt-include-typescript-output-files/5009

通过在NuSpec文件中递归添加所有文件来解决这个问题:<file src="src/**/*.ts" />

https://octopus.com/docs/packaging-applications/creating-packages/nuget-packages/using-octopack/octopack-to-include-buildevent-files

How to include directories recursively in NuSpec file

完整的nuspec供参考:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    <id>Project.Web.$env$</id>
    <version>$version$</version>
    <authors>Administrator</authors>
    <owners>Administrator</owners>
    <licenseUrl>http://example.com</licenseUrl>
    <projectUrl>http://example.com</projectUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Project nuget packages</description>
    <releaseNotes />
  </metadata>

   <files>
      <file src="src/dist/" target="/" />
      <file src="src/**/*.ts" />
   </files>
</package>

https://docs.microsoft.com/en-us/nuget/reference/nuspec

我希望这能为别人节省时间!

© www.soinside.com 2019 - 2024. All rights reserved.