I have a project where the wwwroot for an ASP.NET Core application is an SPA managed entirely by a node build chain. This means VS is completely hands-off with regards to the development of the UI, but it does have to somewhat be aware of it to debug and publish.
VS2015 / project.json Build
The project.json file looked as follows:
"buildOptions": { "emitEntryPoint": true, "preserveCompilationContext": true, "compile": { "exclude": ["wwwroot"] } }, "publishOptions": { "include": [ "wwwroot/dist/prod", "appsettings.json", "web.config" ] }
This would result in the wwwroot not getting compiled whatsoever, but the files within ‘dist’ would get published along with the .NET code. The node_modules folder was hidden within the VS Solution Explorer.
VS2017 / CSProj build
The auto-migration with VS2017 will attempt to follow the changes in the project.json, but the end result won’t work. VS will be super slow due to the node_modules folder, while also trying to compile the Typescript. You can wholesale block the compilation of Typescript, but I prefer to be a bit more explicit about what I want VS to do. Edit the .csproj for your project, and use the following ItemGroup to do ensure it does the same as the project.json from earlier:
<ItemGroup> <Compile Remove="wwwroot\**" /> <Content Remove="wwwroot\**" /> <EmbeddedResource Remove="wwwroot\**" /> <None Remove="wwwroot\**" /> <Content Include="wwwroot\dist\prod\**\*" /> <Content Update="wwwroot\dist\prod\**\*;appsettings.json;web.config"> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </Content> </ItemGroup>
This has the additional advantage in that the files we don’t care about in wwwroot are automatically hidden for all users of the solution – no manually hiding from Solution Explorer.