Исключить перенесенные / несуществующие файлы.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

У меня была та же проблема, что и у вас, и я решил ее, используя этот подход:

  1. Отредактируйте файл.targets, вызвавший вашу ошибку (вы можете найти его на панели вывода)

  2. Вставьте в узел 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. Сохраните, перезапустите Visual Studio и повторно опубликуйте

Вы можете исключить файлы из пакета с помощью следующего фрагмента MSBuild:

<ItemGroup>  
  <ExcludeFromPackageFiles Include="Sample.Debug.xml">  
    <FromTarget>Project</FromTarget> 
  </ExcludeFromPackageFiles> 
</ItemGroup> 

Проверьте блог Сайеда для полного учебника:

http://sedodream.com/2010/08/15/WebDeploymentToolMSDeployHowToExcludeFilesFromPackageBasedOnConfiguration.aspx

Другие вопросы по тегам