我有一个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)
我通过编辑项目(csproj)文件实现了这一点。我将.ts(它们存储在TypeScriptCompile项目中)文件包含在Content项目中,即
<Target Name="AddTsToContent" AfterTargets="CompileTypeScript" Condition="'$(BuildingProject)' != 'false'">
<ItemGroup>
<Content Include="@(TypeScriptCompile)" Condition="'$(Configuration)'=='Debug'"/>
</ItemGroup>
</Target>
注意:由于条件,这包括仅适用于Debug
构建配置的TypeScript内容。
基于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
中的最后一个元素。
首先,您可以查看已发布的目录以查看文件是否存在。您可以使用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命令,标记为要发布的文件现在应该在输出文件夹中。
找到这个帖子,@ 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" />
。
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
我希望这能为别人节省时间!