尝试在Visual Studio 2015中更新Web时发布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中间/输出文件的目录时,会出现错误。要重现此错误,只需在新的Visual Studio TypeScript HTML应用程序项目的根目录中创建一个tsconfig.json
文件,其中包含以下内容:
{
"compilerOptions": {
"outDir": "transpiled"
}
}
如果不使用outDir
中间/输出目录选项,我会发布我的源文件,这是我不想要的。 (此外,项目输出与源混合在一起,项目变得一团糟。)
如何从包/发布中排除这些TypeScript转换文件?
由于我运行WebPack来创建单独的可部署.JS捆绑文件(包含在我的项目中并成功执行包/发布),我实际上并不想要包含任何这些已编译的文件。
其他研究:
我已经尝试在解决方案资源管理器中排除.TS源,将其设置为无/不复制。但是这里真的很奇怪:
任意更改"无"和#34; TypeScript编译" (设置或取消设置)项目中的.TS文件将允许我的项目成功发布到服务器,并且没有部署已转换的.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">
答案 0 :(得分:4)
我和你有同样的问题,我使用这个approach来解决它:
编辑导致错误的.targets文件(您可以在ouput面板中找到它)
在节点中粘贴链接中提供的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>
答案 1 :(得分:0)
您可以使用以下MSBuild代码段从包中排除文件:
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
查看Sayed的博客,获取完整的教程:
答案 2 :(得分:0)
我有同样的问题。我将Visual Studio的TypeScript工具升级到2.1.4,现在一切都很好。
https://www.microsoft.com/en-us/download/details.aspx?id=48593