4

Visual Studio 2015 Update 2 で TypeScript プロジェクトを Web 公開しようとしているとき。ビルドは成功しますが、パッケージ/発行は次の時点で失敗します。

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には、新しい Visual Studio TypeScript HTML アプリケーション プロジェクトのルートに次の内容のファイルを作成するだけです。

{
    "compilerOptions": {
        "outDir": "transpiled"
    }
}

中間/出力ディレクトリ オプションを使用しない場合outDir、ソース ファイルが公開されますが、これは望ましくありません。(また、プロジェクトの出力がソースに混ざり、プロジェクトがめちゃくちゃになります。)

これらの TypeScript トランスパイル ファイルをパッケージ/パブリッシュから除外するにはどうすればよいですか?

WebPack を実行して個別のデプロイ可能な .JS バンドル ファイル (プロジェクトに含まれ、パッケージ/公開を正常に実行する) を作成するため、実際にはこれらのトランスパイルされたファイルを含めたくありません。


追加の調査:

Solution Explorer で .TS ソースを除外して、None/Do not copy に設定しようとしました。しかし、これについて本当に奇妙なことは次のとおりです。

プロジェクトの .TS ファイルで "None" と "TypeScript Compile" の間の変更(設定または設定解除)により、プロジェクトがサーバーに正常に公開され、トランスパイルされた .TS/.JS ファイルはデプロイされません。ただし、プロジェクトを再度ビルドする必要がある別の変更を行うまでのみです。その後、.JS ファイルが見つからないというエラーが再び表示されます。

つまり、事実上、公開を強制するために実行できるブードゥー教がありますが、それでもこの問題を修正したいと思っています。

どういうわけか、C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targetsビルドまたはパッケージングプロセス中に(AFAIK)決して存在しなかったファイルのリストを変数に含む615行目に到達します@(FilesForPackagingFromProject)。ビルドを実行しただけの場合、ターゲットの 1 つが .TS 拡張子を .JS に直接置換するように見えますが、ビルドで実際に何が起こったかは関係ありません。

<CopyPipelineFiles PipelineItems="@(FilesForPackagingFromProject)"
                       SourceDirectory="$(WebPublishPipelineProjectDirectory)"
                       TargetDirectory="$(_PreAspnetCompileMergeSingleTargetFolder)"
                       SkipMetadataExcludeTrueItems="True"
                       UpdateItemSpec="True"
                       DeleteItemsMarkAsExcludeTrue ="True">
4

3 に答える 3

4

私はあなたと同じ問題を抱えていましたが、このアプローチを使用して解決しました:

  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 を再起動し、再発行します
于 2016-05-19T09:28:23.080 に答える
0

同じ問題がありました。Visual Studio 用の TypeScript ツールを 2.1.4にアップグレードしましたが、今ではすべて問題ありません

https://www.microsoft.com/en-us/download/details.aspx?id=48593

于 2017-01-08T15:36:34.963 に答える