microsoft / microsoft/TypeScript

MSBuild integration with ASP.NET Core

Aperta
#60,538 8 commenti 27 reazioni 1 assegnatario Vedi su GitHub

@joj ci sta già lavorando.

Dal 20/11/2024.

Needs Investigation
Lingua principale
Go
Stelle
111k
Fork
14.4k
Merge medio
1g 19h
PR unite (30g)
117

Descrizione

The ASP.NET SDK has an asset pipeline that processes all the web content for the app to apply optimizations (compression/fingerprinting, etc.).

There are a few things that make integration between the MSBuild SDK and the ASP.NET Core pipeline challenging, and while we've given people guidance, it would be great if we can enable this scenario to work without having to make such changes to their project.

There are two main challenges that we face:

  • By default the TypeScript targets run too late in the pipeline for us to see the generated outputs. Our guidance suggests hooking up the relevant targets to the PrepareForBuild target as shown below:
<PrepareForBuildDependsOn>
  CompileTypeScript;
  CompileTypeScriptWithTSConfig;
  GetTypeScriptOutputForPublishing;$(PrepareForBuildDependsOn)
</PrepareForBuildDependsOn>
  • I suspect the snippet above is not fully correct, as more targets are involved in the TypeScript setup in CompileDependsOn.
  • This makes the TS targets run early enough so that standard targets in the ASP.NET Core pipeline can detect and process them as expected.
  • The second challenge that we face is that is typical for people to dump their outputs into the wwwroot folder. When this happens, (after the change above) GetTypeScriptOutputForPublishing will add all the GeneratedJavaScript items to the Content item group unconditionally.
    • This results in the presence of duplicate Content items that interferes with the build.
    • We've given people the following target to remove the duplicates before the GetTypeScriptOutputForPublishing target adds them.
    <Target Name="RemoveDuplicateTypeScriptOutputs" BeforeTargets="GetTypeScriptOutputForPublishing">
      <ItemGroup>
        <Content Remove="@(GeneratedJavaScript)" />
      </ItemGroup>
    </Target>
    

This gets things into a working state, but it's obviously not trivial for customers to discover/setup in their app. Hopefully we can work together to make this scenario just work by implementing a few simple changes.

  • Have a target ResolveTypeScriptOutputs or similar that produces the compile outputs as items in the Content item group and that can run early enough in the pipeline (PrepareForBuild is a good candidate, or it can be configurable).
  • Avoid adding duplicate content items to the Content item group by using Exclude="@(Content) to prevent duplicates.
  • Checking for UsingMicrosoftNETSdkStaticWebAssets to wire up ResolveTypeScriptOutputs early enough in the pipeline so that the outputs can be detected and disable other targets that are not needed (Anything that deals with copying the outputs to the output/publish folder is already handled by the static web assets SDK).

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.