Visual Studio(2017 和 2019)忽略 TypeScriptCompileBlocked

And*_*ham 7 visual-studio typescript reactjs create-react-app

我在使用 Visual Studio 编译 Typescript 文件时遇到了一些问题,这导致了一个巨大的头痛,因为.js项目运行时将首先使用编译的文件,而不是使用 SPA 开发服务器生成的文件。

我创建了一个 React 应用程序 ( create-react-app my-app --typescript),一切工作正常,直到我添加一个新.tsx文件。由于某种原因,如果通过解决方案资源管理器添加该文件,VS 将始终编译该文件。

我确保 Typescript 编译在.csproj

<PropertyGroup>
    <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
    {...}
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

我注意到的一件事是,当我添加一个新.tsx文件时,VS 会将几个条目放入项目文件中:

<ItemGroup>
    <None Remove="<project>\src\<file>.tsx" />
</ItemGroup>

<ItemGroup>
    <TypeScriptCompile Include="<project>\src\<file>.tsx" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

有趣的是,当我从项目中删除这些条目时,它仍然会编译,直到我重新启动 VS,有没有办法强制 Visual Studio 不编译任何Typescript 文件,也不将它们添加到项目文件中,或者这只是另一个错误VS 解决方法?

And*_*ham 5

模板文件本身中有一个设置导致脚本编译,有几种方法可以处理这个问题,要么创建一个新.tsx模板,要么更新现有模板。脚本模板位于

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\ItemTemplates\AspNetCore\Web\Scripts\1033\TypeScriptJsxFile

在 tsxFile.vstemplate 下有一个属性ProjectItem告诉TemplateContentVS 编译文件,以修复从模板中删除 `ItemType="TypeScriptCompile" 的问题。找到该部分:

<TemplateContent>
    <ProjectItem SubType="Code" ItemType="TypeScriptCompile" TargetFileName="$fileinputname$.tsx" ReplaceParameters="true">file.tsx</ProjectItem>
</TemplateContent>
Run Code Online (Sandbox Code Playgroud)

只需删除整个属性并保存,如果要更新模板,则必须使用管理员权限编辑文件:

<TemplateContent>
    <ProjectItem SubType="Code" TargetFileName="$fileinputname$.tsx" ReplaceParameters="true">file.tsx</ProjectItem>
</TemplateContent>
Run Code Online (Sandbox Code Playgroud)

我在创建新模板时确实遇到了一些问题,如果您遇到问题,请参阅此问题