title: How do you make two UI-differing products from one codebase?
body: <p>We have a C# product developed under two names with two different logos (and some other strings) and we need a way of choosing/displaying these different values, depending on how the app is configured (at either compile time or runtime, no preference yet). </p>
  
  <p>The business logic, UI layout etc will be the same for both versions.</p>
  
  <p>The current code is somewhat legacy, so we have a lot of strings scattered throughout business logic etc. We don't really use resource files or anything like that. Internationalisation isn't an immediate problem, but may be in the near future.</p>
  
  <p>I was considering the following approaches:</p>
  
  <ol>
  <li>A run time dictionary, populated with a compile-time script, or as a facade to an XML dictionary (or similar), with a similar construct for images, using enums or some other internal value as a key.</li>
  <li>Using Microsoft Resource files (.resx), but from what I've seen, these seem to be intended for different languages (french etc), rather than different product configurations</li>
  <li>Different build Visual Studio projects, storing the strings in some way in separate projects (so that the build project references the business logic + product_version_X_strings projects)</li>
  <li>Some permutation of 1 - 3</li>
  </ol>
  
  <p>It has also been suggested that we run the two product versions in different git branches, and search and replace the relevant strings.</p>
  
  <p>Ideally the solution could be extended/expanded to include (and hence centralise) all user-facing strings contained in the application.</p>
  
  <p>Is there a better way to do this, or some construct I'm not aware of? What's the preferred approach?</p>