我有一个MVC 5.1 Web应用程序,我最近开始使用TypeScript。我想使用sourcemapping,所以我在项目中包含了.ts,.js和.js.map文件。
当我发布应用程序(例如文件系统或Azure)时,只复制.js和.js.min文件,而不是.ts文件。这意味着我没有在已发布的网站上获得源映射。
TypeScript文件有“Build Action”:“TypeScriptCompile”,我已经使用“Do not copy”和“Copy always”测试了“Copy to Output Directory”,但仍未发布.ts文件。 / p>
发布应用程序时如何包含.ts文件?
(我正在使用VS1013 Update 2与TypeScript 1.0.1和Web Essentials 2013 for Update 2)
答案 0 :(得分:34)
我是通过编辑项目(csproj)文件实现的。我将.ts(它们存储在 TypeScriptCompile 项目中)文件包含在 Content 项目中,即
<Target Name="AddTsToContent" AfterTargets="CompileTypeScript" Condition="'$(BuildingProject)' != 'false'">
<ItemGroup>
<Content Include="@(TypeScriptCompile)" Condition="'$(Configuration)'=='Debug'"/>
</ItemGroup>
</Target>
注意:由于条件,这仅包括Debug
构建配置的TypeScript内容。
答案 1 :(得分: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
中的最后一个元素。
答案 2 :(得分: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任务期间,项目的所有输出都会复制到输出目录,并且#34; CopyFilesToOutputDirectory &#34;。
如果在运行MSBuild命令之后,您的.ts文件被标记为&#34;始终复制&#34;或者&#34;复制如果更新&#34;仍然没有被复制,很可能你的项目文件没有导入Microsoft提供的公共目标文件,其中任务&#34; CopyFilesToOutputDirectory &#34;是定义。
在这种情况下,编辑.csproj文件,将import子句添加到相应的文件中,如下所示:
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
尝试导入Microsoft.WebApplication.targets后再次运行MSBuild命令,标记为要发布的文件现在应该在输出文件夹中。
答案 3 :(得分:0)
发现了该线程,@ StanislavBerkov的解决方案非常适合发布ts-files
。通过八达通部署来部署我们的解决方案时,尽管开始出现问题,但没有再添加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
我希望这可以节省其他人的时间!