<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Building From Source</title><link>https://sourceforge.net/p/sucrose/wiki/Building%2520From%2520Source/</link><description>Recent changes to Building From Source</description><atom:link href="https://sourceforge.net/p/sucrose/wiki/Building%20From%20Source/feed" rel="self"/><language>en</language><lastBuildDate>Sat, 04 Jul 2026 04:15:52 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/sucrose/wiki/Building%20From%20Source/feed" rel="self" type="application/rss+xml"/><item><title>Building From Source modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Building%2520From%2520Source/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -102,7 +102,7 @@

 - It does **not** build the executables, engines, the Portal, or the full solution.
 - It uses .NET `11.0.x` quality `preview`, restores and builds with `-p:UseSharedCompilation=false`, and suppresses these warnings: `CS0067, CS0108, CS0109, CS0114, CS0169, CS0414, CS0618, CS0649, CS8632, CA1416, NU5104, NETSDK1138, SYSLIB0003`.

-The practical consequence: a change that breaks an engine, the Portal, or a shared project **will still pass CI**. Reviewers and contributors must build locally. Full-app builds happen only locally or via the publish pipeline. The other workflows (`congratulations.yml`, `nuxt-deploy.yml`) do not build the app.
+The practical consequence: a change that breaks an engine, the Portal, or a shared project **will still pass CI**. Reviewers and contributors must build locally. Full-app builds happen only locally or via the publish pipeline. The other workflows (`congratulations.yml`) do not build the app.

 ## Common build gotchas

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:52 -0000</pubDate><guid>https://sourceforge.net31e0b46db1602e2c6a684b847b6e9da9d35074ef</guid></item><item><title>Building From Source modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Building%2520From%2520Source/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -36,7 +36,7 @@
 |----------|----------|-----------|
 | `src/Sucrose.slnx` | The **main app** — all live engines, services, and class libraries | x86, x64, ARM64 |
 | `src/Sucrose.Bundle.slnx` | Only the `Sucrose.Bundle` installer/packager project (plus solution-items: build props/targets, packages, `global.json`, `NuGet.Config`) | ARM64, x64, x86 |
-| `src/Sucrose.Localizer.slnx` | The `Sucrose.Localizer` translation tool | — |
+| `src/Sucrose.Localizer.slnx` | The `Sucrose.Localizer` translation tool | ARM64, x64, x86 |

 Most development happens against `src/Sucrose.slnx`. The Bundle and Localizer have their own solutions because they target a different framework (`net48` for the Bundle) or are standalone utilities.

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:45 -0000</pubDate><guid>https://sourceforge.net93e0e049cc5be7226b31b1a4dc48b2b0ae936437</guid></item><item><title>Building From Source modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Building%2520From%2520Source/</link><description>&lt;div class="markdown_content"&gt;&lt;h1 id="h-building-from-source"&gt;Building From Source&lt;/h1&gt;
&lt;p&gt;This page is the developer's guide to compiling Sucrose locally. It covers the required SDK and toolchain, the three solutions, the exact &lt;code&gt;dotnet restore&lt;/code&gt;/&lt;code&gt;dotnet build&lt;/code&gt; commands, single-project builds, where build output lands, the absence of a test suite, and what Continuous Integration actually compiles (much less than you might expect). If your goal is to produce shippable installers rather than just compile, read &lt;a href="./Publish-Pipeline"&gt;Publish Pipeline&lt;/a&gt; and &lt;a href="./Bundle-Installer-Internals"&gt;Bundle Installer Internals&lt;/a&gt; afterward.&lt;/p&gt;
&lt;h2 id="h-contents"&gt;Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#prerequisites"&gt;Prerequisites&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-three-solutions"&gt;The three solutions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#restore-and-build"&gt;Restore and build&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#building-a-single-project"&gt;Building a single project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#build-output-locations"&gt;Build output locations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#code-style-enforcement"&gt;Code-style enforcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#no-test-suite"&gt;No test suite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#what-ci-actually-builds"&gt;What CI actually builds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#common-build-gotchas"&gt;Common build gotchas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#see-also"&gt;See also&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h-prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SDK&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A &lt;strong&gt;.NET 11 preview SDK&lt;/strong&gt;. &lt;code&gt;global.json&lt;/code&gt; pins &lt;code&gt;"version": "11.0.0"&lt;/code&gt; with &lt;code&gt;"allowPrerelease": true&lt;/code&gt; and &lt;code&gt;"rollForward": "latestMajor"&lt;/code&gt;. CI uses &lt;code&gt;dotnet-version: 11.0.x&lt;/code&gt;, &lt;code&gt;dotnet-quality: preview&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Target framework (app)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;net10.0-windows&lt;/code&gt; (set via &lt;code&gt;TargetFrameworks&lt;/code&gt; in &lt;code&gt;Directory.Build.props&lt;/code&gt;). The .NET 11 SDK &lt;em&gt;builds&lt;/em&gt; the .NET 10 target.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Target framework (installer)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;net48&lt;/code&gt; (.NET Framework 4.8) — only the &lt;code&gt;Sucrose.Bundle&lt;/code&gt; installer project uses this; you also need the .NET Framework 4.8 targeting pack to build it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Windows (WPF, Windows-only).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NuGet source&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;nuget.org only (&lt;code&gt;NuGet.Config&lt;/code&gt;). Packages are centrally pinned in &lt;code&gt;Directory.Packages.props&lt;/code&gt; (transitive pinning enabled).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Code style&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;EnforceCodeStyleInBuild=true&lt;/code&gt; — &lt;code&gt;.editorconfig&lt;/code&gt; violations fail the build (see &lt;a href="./Code-Conventions"&gt;Code Conventions&lt;/a&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The .NET 11 SDK pin is deliberate: &lt;code&gt;rollForward: latestMajor&lt;/code&gt; + &lt;code&gt;allowPrerelease: true&lt;/code&gt; means the build picks the newest installed major-version SDK, falling forward to a preview if that is what is installed. Install a current .NET 11 preview SDK and the repo will use it.&lt;/p&gt;
&lt;h2 id="h-the-three-solutions"&gt;The three solutions&lt;/h2&gt;
&lt;p&gt;Sucrose is split across three &lt;code&gt;.slnx&lt;/code&gt; (the new XML-based solution format) files:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;th&gt;Contains&lt;/th&gt;
&lt;th&gt;Platforms&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Sucrose.slnx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The &lt;strong&gt;main app&lt;/strong&gt; — all live engines, services, and class libraries&lt;/td&gt;
&lt;td&gt;x86, x64, ARM64&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Sucrose.Bundle.slnx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Only the &lt;code&gt;Sucrose.Bundle&lt;/code&gt; installer/packager project (plus solution-items: build props/targets, packages, &lt;code&gt;global.json&lt;/code&gt;, &lt;code&gt;NuGet.Config&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;ARM64, x64, x86&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Sucrose.Localizer.slnx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The &lt;code&gt;Sucrose.Localizer&lt;/code&gt; translation tool&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Most development happens against &lt;code&gt;src/Sucrose.slnx&lt;/code&gt;. The Bundle and Localizer have their own solutions because they target a different framework (&lt;code&gt;net48&lt;/code&gt; for the Bundle) or are standalone utilities.&lt;/p&gt;
&lt;h2 id="h-restore-and-build"&gt;Restore and build&lt;/h2&gt;
&lt;p&gt;Restore packages for the main solution first:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;dotnet&lt;/span&gt; &lt;span class="n"&gt;restore&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Sucrose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;slnx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Build the whole solution for x64 in Release:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;dotnet&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Sucrose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;slnx&lt;/span&gt; &lt;span class="n"&gt;-c&lt;/span&gt; &lt;span class="n"&gt;Release&lt;/span&gt; &lt;span class="n"&gt;-p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;PlatformTarget&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;x64&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The supported platforms are &lt;code&gt;x86&lt;/code&gt;, &lt;code&gt;x64&lt;/code&gt;, and &lt;code&gt;ARM64&lt;/code&gt;; pass the one you want via &lt;code&gt;-p:PlatformTarget=&lt;/code&gt;. The chosen platform also defines a matching preprocessor symbol (&lt;code&gt;X86&lt;/code&gt;/&lt;code&gt;X64&lt;/code&gt;/&lt;code&gt;ARM64&lt;/code&gt;) used in shared code — see &lt;a href="./Preprocessor-Symbols"&gt;Preprocessor Symbols&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: full publish (with the trimmed private runtime and the compressed &lt;code&gt;.7z&lt;/code&gt; payload) is &lt;strong&gt;not&lt;/strong&gt; done with &lt;code&gt;dotnet build&lt;/code&gt;. For that, run the publish pipeline described in &lt;a href="./Publish-Pipeline"&gt;Publish Pipeline&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="h-building-a-single-project"&gt;Building a single project&lt;/h2&gt;
&lt;p&gt;You can compile any individual project directly. For example, to build only the Portal UI:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;dotnet&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Portal&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Sucrose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Portal&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Sucrose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Portal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;csproj&lt;/span&gt; &lt;span class="n"&gt;-c&lt;/span&gt; &lt;span class="n"&gt;Release&lt;/span&gt; &lt;span class="n"&gt;-p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;PlatformTarget&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;x64&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Because the codebase uses &lt;a href="./Shared-Item-Projects"&gt;Shared Item Projects&lt;/a&gt; (&lt;code&gt;.shproj&lt;/code&gt; + &lt;code&gt;.projitems&lt;/code&gt; imported with &lt;code&gt;Label="Shared"&lt;/code&gt;) rather than NuGet packages or class-library references for most cross-cutting code, building a single executable also compiles all the shared source it imports — there is no separate "build the shared library first" step. Class libraries under &lt;code&gt;src/Library/&lt;/code&gt; are the exception: they are real &lt;code&gt;.csproj&lt;/code&gt; projects consumed by &lt;code&gt;&amp;lt;ProjectReference&amp;gt;&lt;/code&gt; and produce their own &lt;code&gt;.dll&lt;/code&gt;. See &lt;a href="./Repository-Layout"&gt;Repository Layout&lt;/a&gt; for the physical-to-logical folder mapping.&lt;/p&gt;
&lt;h2 id="h-build-output-locations"&gt;Build output locations&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;Contents&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Sucrose/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Build output root — &lt;code&gt;BaseOutputPath&lt;/code&gt; is &lt;code&gt;..\..\Sucrose&lt;/code&gt; in &lt;code&gt;Directory.Build.props&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Sucrose/Object/&amp;lt;Project&amp;gt;/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Per-project intermediate (obj) output.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Sucrose/&amp;lt;Layer&amp;gt;/&amp;lt;arch&amp;gt;/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Per-executable output, e.g. &lt;code&gt;src/Sucrose/Launcher/x64&lt;/code&gt;; engines nest under &lt;code&gt;src/Sucrose/Live/&amp;lt;EngineName&amp;gt;/&amp;lt;arch&amp;gt;&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Sucrose/Package&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Publish packages produced by the publish pipeline.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src/Sucrose/Bundle/&amp;lt;arch&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The compiled installer &lt;code&gt;.exe&lt;/code&gt; (when building &lt;code&gt;Sucrose.Bundle&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Each executable sets a per-platform &lt;code&gt;OutputPath&lt;/code&gt; under &lt;code&gt;$(BaseOutputPath)&lt;/code&gt; (e.g. &lt;code&gt;$(BaseOutputPath)\Launcher\x64&lt;/code&gt;). Release builds also set &lt;code&gt;AppHostDotnetRoot&lt;/code&gt;/&lt;code&gt;AppHostRelativeDotNet&lt;/code&gt; to &lt;code&gt;..\Sucrose.Runtime&lt;/code&gt; so the published apps probe the trimmed private runtime folder rather than a machine-wide install.&lt;/p&gt;
&lt;h2 id="h-code-style-enforcement"&gt;Code-style enforcement&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Directory.Build.props&lt;/code&gt; sets &lt;code&gt;EnforceCodeStyleInBuild=true&lt;/code&gt;, so &lt;code&gt;.editorconfig&lt;/code&gt; violations are build &lt;strong&gt;errors&lt;/strong&gt; on your machine. Notable global build characteristics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Nullable&lt;/code&gt; is &lt;strong&gt;disabled&lt;/strong&gt; project-wide.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ImplicitUsings&lt;/code&gt; is &lt;strong&gt;enabled&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LangVersion&lt;/code&gt; is &lt;code&gt;preview&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Optimize=false&lt;/code&gt; is set globally — even for Release builds (a deliberate, notable build characteristic).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CS8632&lt;/code&gt;, &lt;code&gt;WFO0003&lt;/code&gt;, &lt;code&gt;SYSLIB0014&lt;/code&gt; are suppressed in &lt;code&gt;Directory.Build.props&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the full style ruleset (4-space indent, CRLF, block-scoped namespaces, explicit types over &lt;code&gt;var&lt;/code&gt;, expression-bodied accessors, the namespace-alias convention, etc.), see &lt;a href="./Code-Conventions"&gt;Code Conventions&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="h-no-test-suite"&gt;No test suite&lt;/h2&gt;
&lt;p&gt;There are &lt;strong&gt;no test projects&lt;/strong&gt; in any of the three solutions, so there are no test commands to run. Verification is manual: build locally, run the app, and exercise the affected paths. This makes local building before opening a PR especially important — see &lt;a href="./Contributing"&gt;Contributing&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="h-what-ci-actually-builds"&gt;What CI actually builds&lt;/h2&gt;
&lt;p&gt;This is a frequent source of confusion. &lt;strong&gt;No CI job builds the full solution.&lt;/strong&gt; The only workflow that compiles C# is CodeQL:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.github/workflows/codeql-analysis.yml&lt;/code&gt; runs on push/PR to &lt;code&gt;develop&lt;/code&gt; and nightly (&lt;code&gt;cron: '0 0 * * *'&lt;/code&gt;), on &lt;code&gt;windows-2022&lt;/code&gt;, language matrix &lt;code&gt;csharp&lt;/code&gt; only.&lt;/li&gt;
&lt;li&gt;It builds a matrix of &lt;strong&gt;only 7 &lt;code&gt;src/Library/&lt;/code&gt; projects&lt;/strong&gt;: &lt;code&gt;Pipe&lt;/code&gt;, &lt;code&gt;Memory&lt;/code&gt;, &lt;code&gt;Signal&lt;/code&gt;, &lt;code&gt;Manager&lt;/code&gt;, &lt;code&gt;Resources&lt;/code&gt;, &lt;code&gt;Transmission&lt;/code&gt;, &lt;code&gt;XamlAnimatedGif&lt;/code&gt;. &lt;strong&gt;&lt;code&gt;Mpv.NET&lt;/code&gt; is excluded&lt;/strong&gt; (commented out).&lt;/li&gt;
&lt;li&gt;It does &lt;strong&gt;not&lt;/strong&gt; build the executables, engines, the Portal, or the full solution.&lt;/li&gt;
&lt;li&gt;It uses .NET &lt;code&gt;11.0.x&lt;/code&gt; quality &lt;code&gt;preview&lt;/code&gt;, restores and builds with &lt;code&gt;-p:UseSharedCompilation=false&lt;/code&gt;, and suppresses these warnings: &lt;code&gt;CS0067, CS0108, CS0109, CS0114, CS0169, CS0414, CS0618, CS0649, CS8632, CA1416, NU5104, NETSDK1138, SYSLIB0003&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The practical consequence: a change that breaks an engine, the Portal, or a shared project &lt;strong&gt;will still pass CI&lt;/strong&gt;. Reviewers and contributors must build locally. Full-app builds happen only locally or via the publish pipeline. The other workflows (&lt;code&gt;congratulations.yml&lt;/code&gt;, &lt;code&gt;nuxt-deploy.yml&lt;/code&gt;) do not build the app.&lt;/p&gt;
&lt;h2 id="h-common-build-gotchas"&gt;Common build gotchas&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Building the Bundle first fails.&lt;/strong&gt; &lt;code&gt;Sucrose.Bundle&lt;/code&gt; embeds &lt;code&gt;src/Sucrose/Package/Compressed/net10.0-windows/Sucrose-&amp;lt;Platform&amp;gt;.7z&lt;/code&gt;, which only exists after the publish pipeline runs with &lt;code&gt;CompressPackage=true&lt;/code&gt;. Run &lt;a href="./Publish-Pipeline"&gt;Publish Pipeline&lt;/a&gt; before building the Bundle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Style errors are build errors.&lt;/strong&gt; Because &lt;code&gt;EnforceCodeStyleInBuild=true&lt;/code&gt;, an &lt;code&gt;.editorconfig&lt;/code&gt; violation will stop your local build even though CI (which only compiles 7 projects) might not catch it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Optimize=false&lt;/code&gt;&lt;/strong&gt; is global, so Release output is not optimized — expected, not a misconfiguration.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h-see-also"&gt;See also&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="./Repository-Layout"&gt;Repository Layout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="./Shared-Item-Projects"&gt;Shared Item Projects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="./Code-Conventions"&gt;Code Conventions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="./Preprocessor-Symbols"&gt;Preprocessor Symbols&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="./Publish-Pipeline"&gt;Publish Pipeline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="./Bundle-Installer-Internals"&gt;Bundle Installer Internals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="./Contributing"&gt;Contributing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="./Architecture-Overview"&gt;Architecture Overview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:18 -0000</pubDate><guid>https://sourceforge.netd8357622a13c9e3c1f28af34c2ea17bd55b8edfa</guid></item></channel></rss>