Deployment 发布时如何包含TypeScript文件?

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

我有一个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文件


(我正在使用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>