Deployment 发布时如何包含TypeScript文件?
我有一个MVC5.1Web应用程序,最近我开始使用TypeScript。我想使用sourcemapping,所以我在项目中包括了.ts、.js和.js.map-file 当我发布应用程序(例如文件系统或Azure)时,只复制.js和.js.min文件,而不复制.ts文件。这意味着我没有在发布的站点上获得源映射 TypeScript文件有“Build Action”:“TypeScriptCompile”,我已经用“Do not Copy”和“Copy always”测试了“Copy to Output Directory”,但.ts文件仍然没有发布 发布应用程序时如何包含.ts文件Deployment 发布时如何包含TypeScript文件?,deployment,visual-studio-2013,typescript,asp.net-mvc-5.1,Deployment,Visual Studio 2013,Typescript,Asp.net Mvc 5.1,我有一个MVC5.1Web应用程序,最近我开始使用TypeScript。我想使用sourcemapping,所以我在项目中包括了.ts、.js和.js.map-file 当我发布应用程序(例如文件系统或Azure)时,只复制.js和.js.min文件,而不复制.ts文件。这意味着我没有在发布的站点上获得源映射 TypeScript文件有“Build Action”:“TypeScriptCompile”,我已经用“Do not Copy”和“Copy always”测试了“Copy to Out
(我正在使用VS2013更新2和TypeScript 1.0.1以及更新2的Web Essentials 2013)首先,您可以查看发布的目录,查看文件是否存在。 您可以使用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 Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
导入Microsoft.WebApplication.targets后,请尝试再次运行MSBuild命令,标记为要发布的文件现在应位于输出文件夹中。我通过编辑project(csproj)文件实现了这一点。我将.ts(它们存储在TypeScriptCompile项中)文件包含到内容项中,即
<Target Name="AddTsToContent" AfterTargets="CompileTypeScript" Condition="'$(BuildingProject)' != 'false'">
<ItemGroup>
<Content Include="@(TypeScriptCompile)" Condition="'$(Configuration)'=='Debug'"/>
</ItemGroup>
</Target>
注意:由于该条件,这仅包括调试
生成配置的TypeScript内容。基于,我仅在生成源映射时才有条件地包括.ts
文件(如项目属性的TypeScript生成
选项卡中配置的)
我把它作为
.csproj
文件的
中的最后一个元素。找到了这个线程,@StanislavBerkov的解决方案完美地实现了发布,包括ts文件。当通过Octopus deploy部署我们的解决方案时,我们开始遇到问题,但没有再次添加ts文件
在生成服务器上检查了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中的\u PublishedWebsites
,所有.ts文件都存在。然而,看着Octopack生成的.nupkg
文件,所有ts文件都消失了!显然,Octopack不包括TypeScript文件
通过在NuSpec文件中递归添加所有文件来解决此问题,如下所示:
填写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>
Project.Web.$env$
$version$
我希望这能为其他人节省时间 .ts文件会复制到输出目录,但不会复制到PublishedWebsites/ProjectName/。。。子目录。我的.csproj…中有import子句要复制:1。创建一个新的Web应用程序项目(MVC)。2.添加一个带有“console.log”(“Hello world”)的类型脚本文件“file1.ts”,标记为“始终复制”。3.发布到文件。4.请注意,仅复制“file1.js”。我怀疑这与typescript编译器有关。很遗憾,在发布项目时,.ts文件仍然没有被复制。@GeirSagberg请确保发布“调试”配置。或者只删除条件=“$(配置)”==“调试”,这对我不起作用。我需要在XML的某个部分中添加这个吗?@Homer它应该在csproj文件中的注释元素附近。请确保您在发布期间使用了“调试”配置(当前发布设置,而不是vs中的项目设置)。@StasBerkov,在注释部分工作后添加它,谢谢!
<?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>