Исключить перенесенные / несуществующие файлы.JS из веб-публикации TypeScript
При попытке веб-публикации проекта TypeScript в Visual Studio 2015, обновление 2; сборка завершается успешно, но пакет / публикация завершается неудачно:
Error: Copying file typescript-filename.js to obj\Release\Package\PackageTmp\typescript-filename.js failed. Could not find file 'typescript-filename.js'.
Ошибка появляется, когда проект указывает каталог для промежуточных / выходных файлов TypeScript. Чтобы воспроизвести эту ошибку, просто создайте tsconfig.json
файл в корне нового проекта HTML-приложения Visual Studio TypeScript со следующим содержимым:
{
"compilerOptions": {
"outDir": "transpiled"
}
}
Если не использовать outDir
Опция промежуточного / выходного каталога, я публикую исходные файлы, которые мне не нужны. (Также выходные данные проекта смешиваются с источником, и проект становится беспорядком.)
Как я могу исключить эти переносимые файлы TypeScript из пакета / публикации?
Поскольку я запускаю WebPack для создания отдельных развертываемых файлов комплекта.JS (которые включены в мой проект и успешно выполняют упаковку / публикацию), я фактически не хочу, чтобы какой-либо из этих передаваемых файлов был включен в любом случае.
Дополнительные исследования:
Я уже пытался исключить источник.TS в обозревателе решений, установив для него значение Нет / Не копировать. Но вот действительно странная вещь об этом:
ЛЮБОЕ изменение между "Нет" и "TypeScript Compile" (установка ИЛИ отмена установки) для файла.TS в моем проекте позволит успешно опубликовать мой проект на сервере, и ни один из переданных файлов.TS/.JS не будет развернут; но только до тех пор, пока я не внес еще одно изменение, требующее повторной сборки проекта. Затем ошибка отсутствующего файла.JS появляется снова.
Так что, по сути, у меня есть какое-то вуду, которое я могу выполнить, чтобы заставить публикацию, но я все же очень хотел бы решить эту проблему.
Так или иначе, C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets
достигает строки 615 со списком файлов, которые (AFAIK) никогда не существовали в процессе компоновки или упаковки, в переменной @(FilesForPackagingFromProject)
, Как будто одна из целей выполняет прямую замену любого расширения.TS на.JS, если оно только что запустило сборку, но без учета того, что на самом деле произошло в сборке.
<CopyPipelineFiles PipelineItems="@(FilesForPackagingFromProject)"
SourceDirectory="$(WebPublishPipelineProjectDirectory)"
TargetDirectory="$(_PreAspnetCompileMergeSingleTargetFolder)"
SkipMetadataExcludeTrueItems="True"
UpdateItemSpec="True"
DeleteItemsMarkAsExcludeTrue ="True">
3 ответа
Я была такая же проблема. Я обновил свои инструменты TypeScript для Visual Studio до 2.1.4, и теперь все хорошо.
https://www.microsoft.com/en-us/download/details.aspx?id=48593
У меня была та же проблема, что и у вас, и я решил ее, используя этот подход:
Отредактируйте файл.targets, вызвавший вашу ошибку (вы можете найти его на панели вывода)
Вставьте в узел 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 и повторно опубликуйте
Вы можете исключить файлы из пакета с помощью следующего фрагмента MSBuild:
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
Проверьте блог Сайеда для полного учебника: