wix installer ice03 Invalid Language Id

ICE rules are Internal Consistency Evaluators - essentially a series of self-diagnosis scripts checking database referential integrity, database consistency, data type and schema compliance as well as running several content validation tests or logical tests on the whole MSI (which is really an MS-SQL database in disguise).

DB Integrity: In other words you check the content of the database against the database schema and a number of content validation rules and determine if the database is objectively speaking containing what it is supposed to, and that it is connected in correct ways.

Sanity-Checks: Some further checks move beyond simple schema and type checking and perform sanity-checks relating to how the application is actually being installed. Certain files should not go to certain locations, some registry keys should never be written to, and similar checks. Custom checks can be created and added as QA steps for corporate deployment.

Custom Actions: The checks are written as custom actions (essentially MSI's mechanism for running executable, custom installation logic during installation) and inspect and evaluate the database during a Validation run. The Windows SDK tool Orca is capable of running validation on any MSI file as illustrated in this picture:

ICE

ICE3: Your particular error message relates to ICE03 - it checks several different things, but this checkpoint is relevant here (please visit the link to see what else it checks):

Invalid Language Id - The database contains an invalid numeric Language Identifier (LANGID). See the Language data type. See Language Identifier Constants and Strings. For example, 1033 for the U.S. and 0 for language neutral.

In your case you need to remove the language specifier altogether if the file is language neutral, or fix your WiX source file to set an appropriate language code. Here is an example from the MSI file installing Orca (1033 is English, most files are unspecified, meaning they are language neutral):

Orca


Links:

  • Wix Custom Dialog Error : ICE03: Not a valid foreign key Visual Studio 2019
  • WIX Error - ICE03: Not a valid foreign key
  • ICE03: String overflow (greater than length permitted in column); Table: CustomAction
  • https://docs.microsoft.com/en-us/windows/win32/msi/ice03
  • WIX Toolset 3.11: Including es-419 language DLLs gives ICE03 error. (.NET 4.8)

Do you really even need to include that file in your MSI? Typically xml files with the name of the assembly are just useful to developers as SDK documentation and doesn't belong in a shipped product.

For that matter, did you even author the wxs or are you using some form of dynamic authoring at build time? If so, add this to my list of reasons of why this is an anti-pattern. (Don't worry, almost no one else wants to believe me either. )

For more information on ICE's ( basically unit tests ) see:

MSI Tip: Authoring an ICE using C# / DTF