typescript - TypeScriptCompileBlocked Ignorerad av Visual Studio 2019


Jag har ett problem med mitt TypeScript-projekt och VS19:

Jag har lagt till detta i .csproj för att förhindra att VS visar "fel" i fel-listan:

<PropertyGroup>
            <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>       
</PropertyGroup>

.csproj-filen har ingen <ItemGroup> som inkluderar några ts- eller tsx-filer.

Jag använder webpack, tsconfig, eslint, etc. för att hantera allt FE-grejer. Det är anledningen till att jag inte vill ha VS19-hjälp med detta :).

Jag behöver att detta fungerar eftersom mina kollegor får detta också och att se 1000+ "fel" är verkligen irriterande.

Jag har hittat några lösningar för att ändra filer som finns lokalt på din dator. Men det vill jag inte, jag behöver en lösning som fungerar så snart du hämtar projektet från git.

.tsconfig:

{
    "compilerOptions": {
        "baseUrl": "./",
        "paths": {
            "Colors": ["classes/Colors"],
            "Api": ["assets/Api"],
            "Components/*": ["src/app/sharedComponents/*"],
            "Classes/*": ["classes/*"],
            "RegExMatchers": ["assets/RegexMatchers"]
        },
        "types": ["node"],
        "target": "es6",
        "lib": ["dom", "dom.iterable", "esnext"],
        "skipLibCheck": true,
        "esModuleInterop": true,
        "allowSyntheticDefaultImports": true,
        "strict": true,
        "forceConsistentCasingInFileNames": true,
        "module": "esnext",
        "moduleResolution": "node",
        "resolveJsonModule": true,
        "isolatedModules": true,
        "noEmit": false,
        "jsx": "react-jsx",
        "declaration": true,
        "typeRoots": ["./src/@types", "../node_modules/@types"]
    },
    "include": ["./src/**/*", "./@types/", "./assets/"],
    "exclude": ["node_modules"]
}

Redigera: Okej, så jag la till detta:

<ItemGroup>
    <None Remove="Web\**\*.tsx" />
    <None Remove="Web\**\*.ts" />
    <None Remove="Web\**\*.js" />
    <None Remove="Web\**\*.html" />
    <Content Remove="Web\*.json" />
</ItemGroup>

uppenbarligen kompilerar inte VS19 filerna nu, men det måste finnas en bättre lösning än detta. VS19 kan inte vara så dumt.. :)

Svar #1

TypeScriptCompileBlocked fungerar vanligtvis bra.

Huvudorsaken till att filer fortfarande visas i min erfarenhet är att jag har många projekt i min lösning och ett eller flera har inte TypeScriptCompileBlocked inställt på True.

Jag tror att när MSBuild kör C:\Program Files (x86)\Microsoft SDKs\TypeScript\4.1\build\Microsoft.TypeScript.targets för vilket projekt som helst utan TypeScriptCompileBlocked verkar det som att det triggar tsc-kompilatorn med flaggan --listFilesOnly för att returnera en lista över filer som täcks av din tsconfig.json. Så här (en kopia från mina detaljerade loggar):

45> C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VisualStudio\NodeJs\node.exe "C:\Program Files (x86)\Microsoft SDKs\TypeScript\4.1\tsc.js" --project "C:***\tsconfig.json" --listEmittedFiles --locale en-US --listFilesOnly (TaskId:432)

Som resultat får den vanligtvis alla ts-filer ändå och eftersom TypeScriptCompileBlocked inte är inställt på True för ett projekt bygger VsTsc alla dem.

När jag har detta brukar jag köra MSBuild (eller bygga i VS 2019) med Verbose-loggar aktiverade och söka efter TypeScriptCompileBlocked=false, någonstans runt detta kan du hitta egenskapen TypeScriptProjectDir som kan hjälpa dig att identifiera vilket projekt det är.

En annan lösning jag ofta använder är att ha en global .targets-fil som importeras i varje projekt i min lösning. Jag kan använda den för att ställa in TypeScriptCompileBlocked och andra globala saker jag vill ha på ett ställe.

Relaterade artiklar