The binder variable "bind.assemblyFullName.<fileid>" generates an invalid type string when applied to an assembly which is not strong named. The PublicKeyToken is given an empty string instead of the correct value of "null".</fileid>
e.g.
(Part of Wix definition file)
...
<file id="user-content-MyAssembly" name="MyAssembly.dll" keypath="yes" source="$(var.MyAssembly.TargetDir)MyAssembly.dll" assembly=".net" assemblyapplication="MyAssembly.dll">
...
<registryvalue action="write" name="Type" type="string" value="MyAssembly.ExampleType, !(bind.assemblyFullName.MyAssembly)">
...</registryvalue></file>
Where MyAssembly.dll is not strong named generates a string that looks like: -
MyAssembly, version=1.0.0.0, culture=neutral, publicKeyToken=, processorArchitecture=MSIL
Which should be
MyAssembly, version=1.0.0.0, culture=neutral, publicKeyToken=null, processorArchitecture=MSIL
From the Wix source code it appears that the fix would be as follows: -
Project Wix; Binder.cs, line 3136:
string assemblyName = string.Concat(assemblyNameValues["name"], ", version=", assemblyNameValues["version"], ", culture=", assemblyNameValues["culture"], ", publicKeyToken=", string.IsNullOrEmpty(assemblyNameValues["publicKeyToken"]) ? "null" : assemblyNameValues["publicKeyToken"]);
This Tracker item was closed automatically by the system. It was
previously set to a Pending status, and the original submitter
did not respond within 15 days (the time period specified by
the administrator of this Tracker).