从 TypeScript Web 发布中排除 transpiled/non-existent 个 .JS 文件
Exclude transpiled/non-existent .JS files from TypeScript Web Publish
在 Visual Studio 2015 年更新 2 中尝试通过网络发布 TypeScript 项目时;构建成功,但 Package/Publish 在以下位置失败:
Error: Copying file typescript-filename.js to obj\Release\Package\PackageTmp\typescript-filename.js failed. Could not find file 'typescript-filename.js'.
当项目为 TypeScript intermediate/output 文件指定目录时出现错误。要重现此错误,只需在新的 Visual Studio TypeScript HTML 应用程序项目的根目录中创建一个 tsconfig.json
文件,其内容如下:
{
"compilerOptions": {
"outDir": "transpiled"
}
}
如果不使用 outDir
intermediate/output 目录选项,我会发布我的源文件,这是我不想要的。 (此外,项目输出与源代码混在一起,项目变得一团糟。)
如何从 Package/Publish 中排除这些 TypeScript t运行spiled 文件?
由于我 运行 WebPack 创建单独的可部署 .JS 包文件(包含在我的项目中并成功执行 package/publish),我实际上不想要任何这些 t运行无论如何都包含了溢出的文件。
补充研究:
我已经尝试在解决方案资源管理器中排除 .TS 源,将其设置为 None/Do 不复制。但这是真正 st运行ge 的事情:
在我的项目 中的 .TS 文件上 "None" 和 "TypeScript Compile" 之间的任何更改(设置或取消设置)将允许我项目成功发布到服务器,部署了none个运行spiled .TS/.JS文件; 但只有在我进行另一项更改 之后才能重新构建项目。然后又出现了丢失.JS文件的错误
所以,实际上,我可以执行一些巫术来强制发布,但我仍然很想解决这个问题。
不知何故,C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets
到达第 615 行,在变量 @(FilesForPackagingFromProject)
中有一个文件列表(据我所知)在构建或打包过程中的任何时候都不存在。就好像其中一个目标直接用 .JS 替换任何 .TS 扩展名,如果它只是 运行 构建,但不考虑构建中实际发生的事情。
<CopyPipelineFiles PipelineItems="@(FilesForPackagingFromProject)"
SourceDirectory="$(WebPublishPipelineProjectDirectory)"
TargetDirectory="$(_PreAspnetCompileMergeSingleTargetFolder)"
SkipMetadataExcludeTrueItems="True"
UpdateItemSpec="True"
DeleteItemsMarkAsExcludeTrue ="True">
您可以使用以下 MSBuild 代码段从包中排除文件:
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
查看 Sayed 的博客以获取完整教程:
我和你有同样的问题,我用这个 approach:
解决了它
编辑导致错误的 .targets 文件(您可以在输出面板中找到它)
在节点中粘贴 link 中提供的 xml :
<Target Name="CustomExcludeFiles"
DependsOnTargets="$(ExcludeFilesFromPackageDependsOn)"
BeforeTargets="ExcludeFilesFromPackage">
<Message Text="Custom exclude..." Importance="high"></Message>
<WriteLinesToFile Condition="$(EnablePackageProcessLoggingAndAssert)"
Encoding="utf-8"
File="$(PackageLogDir)\CustomExcludeFilesBefore.txt"
Lines="@(FilesForPackagingFromProject->'
From:%(Identity)
DestinationRelativePath:%(DestinationRelativePath)
Exclude:%(Exclude)
FromTarget:%(FromTarget)
Category:%(Category)
ProjectFileType:%(ProjectFileType)')" Overwrite="True" />
<ItemGroup>
<FilesForPackagingFromProject Remove="@(FilesForPackagingFromProject)" Condition="!Exists('%(FullPath)')" />
</ItemGroup>
<WriteLinesToFile Condition="$(EnablePackageProcessLoggingAndAssert)"
Encoding="utf-8"
File="$(PackageLogDir)\CustomExcludeFilesAfter.txt"
Lines="@(FilesForPackagingFromProject->'
From:%(Identity)
DestinationRelativePath:%(DestinationRelativePath)
Exclude:%(Exclude)
FromTarget:%(FromTarget) \
Category:%(Category)
ProjectFileType:%(ProjectFileType)')" Overwrite="True"/>
</Target>
- 保存,重启你的Visual Studio并重新发布
我遇到了同样的问题。我将 Visual Studio 的 TypeScript 工具 升级到 2.1.4,现在一切正常。
https://www.microsoft.com/en-us/download/details.aspx?id=48593
在 Visual Studio 2015 年更新 2 中尝试通过网络发布 TypeScript 项目时;构建成功,但 Package/Publish 在以下位置失败:
Error: Copying file typescript-filename.js to obj\Release\Package\PackageTmp\typescript-filename.js failed. Could not find file 'typescript-filename.js'.
当项目为 TypeScript intermediate/output 文件指定目录时出现错误。要重现此错误,只需在新的 Visual Studio TypeScript HTML 应用程序项目的根目录中创建一个 tsconfig.json
文件,其内容如下:
{
"compilerOptions": {
"outDir": "transpiled"
}
}
如果不使用 outDir
intermediate/output 目录选项,我会发布我的源文件,这是我不想要的。 (此外,项目输出与源代码混在一起,项目变得一团糟。)
如何从 Package/Publish 中排除这些 TypeScript t运行spiled 文件?
由于我 运行 WebPack 创建单独的可部署 .JS 包文件(包含在我的项目中并成功执行 package/publish),我实际上不想要任何这些 t运行无论如何都包含了溢出的文件。
补充研究:
我已经尝试在解决方案资源管理器中排除 .TS 源,将其设置为 None/Do 不复制。但这是真正 st运行ge 的事情:
在我的项目 中的 .TS 文件上 "None" 和 "TypeScript Compile" 之间的任何更改(设置或取消设置)将允许我项目成功发布到服务器,部署了none个运行spiled .TS/.JS文件; 但只有在我进行另一项更改 之后才能重新构建项目。然后又出现了丢失.JS文件的错误
所以,实际上,我可以执行一些巫术来强制发布,但我仍然很想解决这个问题。
不知何故,C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets
到达第 615 行,在变量 @(FilesForPackagingFromProject)
中有一个文件列表(据我所知)在构建或打包过程中的任何时候都不存在。就好像其中一个目标直接用 .JS 替换任何 .TS 扩展名,如果它只是 运行 构建,但不考虑构建中实际发生的事情。
<CopyPipelineFiles PipelineItems="@(FilesForPackagingFromProject)"
SourceDirectory="$(WebPublishPipelineProjectDirectory)"
TargetDirectory="$(_PreAspnetCompileMergeSingleTargetFolder)"
SkipMetadataExcludeTrueItems="True"
UpdateItemSpec="True"
DeleteItemsMarkAsExcludeTrue ="True">
您可以使用以下 MSBuild 代码段从包中排除文件:
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
查看 Sayed 的博客以获取完整教程:
我和你有同样的问题,我用这个 approach:
解决了它编辑导致错误的 .targets 文件(您可以在输出面板中找到它)
在节点中粘贴 link 中提供的 xml :
<Target Name="CustomExcludeFiles" DependsOnTargets="$(ExcludeFilesFromPackageDependsOn)" BeforeTargets="ExcludeFilesFromPackage"> <Message Text="Custom exclude..." Importance="high"></Message> <WriteLinesToFile Condition="$(EnablePackageProcessLoggingAndAssert)" Encoding="utf-8" File="$(PackageLogDir)\CustomExcludeFilesBefore.txt" Lines="@(FilesForPackagingFromProject->' From:%(Identity) DestinationRelativePath:%(DestinationRelativePath) Exclude:%(Exclude) FromTarget:%(FromTarget) Category:%(Category) ProjectFileType:%(ProjectFileType)')" Overwrite="True" /> <ItemGroup> <FilesForPackagingFromProject Remove="@(FilesForPackagingFromProject)" Condition="!Exists('%(FullPath)')" /> </ItemGroup> <WriteLinesToFile Condition="$(EnablePackageProcessLoggingAndAssert)" Encoding="utf-8" File="$(PackageLogDir)\CustomExcludeFilesAfter.txt" Lines="@(FilesForPackagingFromProject->' From:%(Identity) DestinationRelativePath:%(DestinationRelativePath) Exclude:%(Exclude) FromTarget:%(FromTarget) \ Category:%(Category) ProjectFileType:%(ProjectFileType)')" Overwrite="True"/> </Target>
- 保存,重启你的Visual Studio并重新发布
我遇到了同样的问题。我将 Visual Studio 的 TypeScript 工具 升级到 2.1.4,现在一切正常。
https://www.microsoft.com/en-us/download/details.aspx?id=48593