【发布时间】:2016-05-03 13:02:04
【问题描述】:
尝试在 Visual Studio 2015 Update 2 中发布 TypeScript 项目时;构建成功,但打包/发布失败:
Error: Copying file typescript-filename.js to obj\Release\Package\PackageTmp\typescript-filename.js failed. Could not find file 'typescript-filename.js'.
当项目为 TypeScript 中间/输出文件指定目录时出现错误。要重现此错误,只需在新的 Visual Studio TypeScript HTML 应用程序项目的根目录中创建一个 tsconfig.json 文件,其内容如下:
{
"compilerOptions": {
"outDir": "transpiled"
}
}
如果不使用outDir 中间/输出目录选项,我会发布我不想要的源文件。 (而且项目输出与源代码混在一起,项目变得一团糟。)
如何从打包/发布中排除这些 TypeScript 转译文件?
由于我运行 WebPack 来创建单独的可部署 .JS 捆绑文件(它们包含在我的项目中并成功执行打包/发布),因此我实际上不希望包含任何这些转译文件。
其他研究:
我已经尝试在解决方案资源管理器中排除 .TS 源,将其设置为无/不复制。但真正奇怪的是:
任何更改在我的项目中的 .TS 文件上的“无”和“TypeScript 编译”(设置或取消设置)将允许我的项目发布到服务器成功,并且没有部署任何转译的 .TS/.JS 文件; 但只有在我进行另一项更改之前,该更改需要重新构建项目。然后丢失的.JS文件错误再次出现。
因此,实际上,我可以执行一些巫术来强制发布,但我仍然很想解决这个问题。
不知何故,C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets 到达第 615 行,其中包含 (AFAIK) 在构建或打包过程中的任何时候都不存在的文件列表,位于变量 @(FilesForPackagingFromProject) 中。就好像其中一个目标直接用 .JS 替换任何 .TS 扩展名(如果它只是运行构建),但不考虑构建中实际发生的情况。
<CopyPipelineFiles PipelineItems="@(FilesForPackagingFromProject)"
SourceDirectory="$(WebPublishPipelineProjectDirectory)"
TargetDirectory="$(_PreAspnetCompileMergeSingleTargetFolder)"
SkipMetadataExcludeTrueItems="True"
UpdateItemSpec="True"
DeleteItemsMarkAsExcludeTrue ="True">
【问题讨论】:
标签: visual-studio typescript msdeploy one-click-web-publishing