ARTICLE AD BOX
I have a setup where there is one web application and multiple libraries containing controllers, Razor views and static content under wwwroot. Something like this:
C:. ├───AspNetCoreTest └───WebProcessorLibrary ├───Areas │ └───TestArea │ ├───Controllers │ └───Views │ └───AreaTest ├───Controllers ├───Views │ ├───Home │ └───Shared └───wwwroot ├───Areas │ └───TestArea │ ├───Content │ └───Scripts ├───Content └───ScriptsIn this example there is only one library, but it could be more.
It is configured to publish on build into its own bin directory:
<PublishDir>$(OutputPath)</PublishDir> <PublishUrl>$(PublishDir)</PublishUrl> <DeployOnBuild>true</DeployOnBuild>So after running dotnet build the web application's bin directory looks like this:
C:\xyz [master ≡ +0 ~9 -0 !]> dir .\tests\apps\AspNetCoreTest\bin\Debug\net9.0\ Directory: C:\xyz\tests\apps\AspNetCoreTest\bin\Debug\net9.0 Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 1/8/2026 8:49 PM wwwroot -a--- 1/8/2026 8:49 PM 2030 AspNetCoreTest.deps.json -a--- 1/8/2026 8:49 PM 8704 AspNetCoreTest.dll -a--- 1/8/2026 8:49 PM 156672 AspNetCoreTest.exe -a--- 1/8/2026 8:49 PM 23444 AspNetCoreTest.pdb -a--- 1/8/2026 8:49 PM 416 AspNetCoreTest.runtimeconfig.json -a--- 1/8/2026 8:49 PM 42602 AspNetCoreTest.staticwebassets.endpoints.json -a--- 1/8/2026 8:49 PM 2310 AspNetCoreTest.staticwebassets.runtime.json -a--- 1/8/2026 8:49 PM 4608 Dayforce.Web.dll -a--- 1/8/2026 8:49 PM 22016 Dayforce.Web.NetCore.dll -a--- 1/8/2026 8:49 PM 28968 Dayforce.Web.NetCore.pdb -a--- 1/8/2026 8:49 PM 20936 Dayforce.Web.pdb -a--- 1/8/2026 8:49 PM 15872 TestModels.dll -a--- 1/8/2026 8:49 PM 35484 TestModels.pdb -a--- 1/8/2026 8:49 PM 558 web.config -a--- 1/8/2026 8:49 PM 84480 WebProcessorLibrary.dll -a--- 1/8/2026 8:49 PM 48424 WebProcessorLibrary.pdb -a--- 1/8/2026 8:49 PM 24416 WebProcessorLibrary.staticwebassets.endpoints.json -a--- 1/8/2026 8:49 PM 2154 WebProcessorLibrary.staticwebassets.runtime.json C:\xyz [master ≡ +0 ~9 -0 !]>And the cshtml views are compiled into the WebProcessorLibrary.dll assembly - verified.
All is in order.
Now I open the solution in VS IDE. Build acceleration and FUTDC are enabled - verified.
My scenario:
Touch a static content, for example .\tests\apps\WebProcessorLibrary\wwwroot\Content\Site.css Build in VS IDE Check if the static content is published (it is not).Observe:
C:\xyz [master ≡ +0 ~9 -0 !]> dir .\tests\apps\WebProcessorLibrary\wwwroot\Content\Site.css,.\tests\apps\AspNetCoreTest\bin\Debug\net9.0\wwwroot\Content\Site.css Directory: C:\xyz\tests\apps\WebProcessorLibrary\wwwroot\Content Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 1/8/2026 8:54 PM 1792 Site.css Directory: C:\xyz\tests\apps\AspNetCoreTest\bin\Debug\net9.0\wwwroot\Content Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 1/8/2026 8:54 PM 1792 Site.css C:\xyz [master ≡ +0 ~9 -0 !]> touch.exe .\tests\apps\WebProcessorLibrary\wwwroot\Content\Site.css C:\xyz [master ≡ +0 ~9 -0 !]> dir .\tests\apps\WebProcessorLibrary\wwwroot\Content\Site.css,.\tests\apps\AspNetCoreTest\bin\Debug\net9.0\wwwroot\Content\Site.css Directory: C:\xyz\tests\apps\WebProcessorLibrary\wwwroot\Content Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 1/8/2026 8:56 PM 1792 Site.css Directory: C:\xyz\tests\apps\AspNetCoreTest\bin\Debug\net9.0\wwwroot\Content Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 1/8/2026 8:54 PM 1792 Site.css C:\xyz [master ≡ +0 ~9 -0 !]>So the new timestamp is 8:56PM, but the published content is still at 8:54PM.
Now let us build the solution in VS IDE (the WebProcessorLibrary project targets both net472 and net9.0 and it builds into separate shared bin directory dedicated to library projects, i.e. web app builds into its own):
Build started at 8:57 PM... 1>------ Build started: Project: WebProcessorLibrary, Configuration: Debug Any CPU ------ 1>WebProcessorLibrary -> C:\dayforce\DevOps\Dayforce.Web\tests\bin.core\Debug\net9.0\WebProcessorLibrary.dll 1>WebProcessorLibrary -> C:\dayforce\DevOps\Dayforce.Web\tests\bin\WebProcessorLibrary.dll ========== Build: 1 succeeded, 0 failed, 6 up-to-date, 0 skipped ========== ========== Build completed at 8:57 PM and took 02.340 seconds ==========So FUTDC has handed off the build for WebProcessorLibrary to the msbuild, but the DLL was not updated, of course:
C:\xyz [master ≡ +0 ~9 -0 !]> dir .\tests\bin.core\Debug\net9.0\WebProcessorLibrary.dll, .\tests\apps\AspNetCoreTest\bin\Debug\net9.0\WebProcessorLibrary.dll Directory: C:\xyz\tests\bin.core\Debug\net9.0 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 1/8/2026 8:49 PM 84480 WebProcessorLibrary.dll Directory: C:\xyz\tests\apps\AspNetCoreTest\bin\Debug\net9.0 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 1/8/2026 8:49 PM 84480 WebProcessorLibrary.dll C:\xyz [master ≡ +0 ~9 -0 !]>The dll timestamp of 8:49PM predates the timestamp of the touched css file. And that makes sense, since the css file is not a dependency of the binary and we do not want it to be.
But it also means the published static content has not been updated either:
C:\xyz [master ≡ +0 ~9 -0 !]> dir .\tests\apps\WebProcessorLibrary\wwwroot\Content\Site.css,.\tests\apps\AspNetCoreTest\bin\Debug\net9.0\wwwroot\Content\Site.css Directory: C:\xyz\tests\apps\WebProcessorLibrary\wwwroot\Content Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 1/8/2026 8:56 PM 1792 Site.css Directory: C:\xyz\tests\apps\AspNetCoreTest\bin\Debug\net9.0\wwwroot\Content Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 1/8/2026 8:54 PM 1792 Site.css C:\xyz [master ≡ +0 ~9 -0 !]>Which is a problem.
What is the proper way to fix it without any of the following:
Disabling FUTDC for any project Disabling build acceleration for any project (it is enabled - verified) Causing C# code to recompile because of static content changes