Upgrading to Ice 3.6.1 from Ice 3.6.0

The subsections below provide information about upgrading existing Ice 3.6.0-based applications to Ice 3.6.1.

On this page:

Full Source and Binary Compatibility

Ice 3.6.1 maintains full source and binary compatibility with Ice 3.6.0: you can upgrade your Ice 3.6.0-based application to Ice 3.6.1 without recompiling or relinking anything.

The database formats used by Ice services such as IceGrid and IceStorm have not changed, therefore no database migration is required. Generally speaking, you are free to use any combination of Ice 3.6.0 and Ice 3.6.1 applications and Ice services.

Some internal Ice interfaces may change in a patch release such as Ice 3.6.1, and therefore you must always upgrade all the Ice components of a given application together. For example, you should not use version 3.6.1 of the ice36.dll with version 3.6.0 of the icessl36.dll in the same application.

Policy Assemblies for .NET Applications

For a .NET application, Ice for .NET includes policy assemblies that supply the .NET run time with the required compatibility information. Policy assemblies have names of the form policy.3.6.package.dll. For example, the policy assembly for IceBox is policy.3.6.IceBox.dll. One way to upgrade an existing .NET application to a new patch release while maintaining binary compatibility is to install the policy assemblies into the Global Assembly Cache (GAC) with gacutil:

gacutil -i <policy.dll>

Another option is to modify the .config file of your application to add bindingRedirect directives, as explained in the links below:

http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx
http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx

For example, in the .config file of an application you can modify the configuration of the Ice and IceBox assemblies as follows:

XML
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

<dependentAssembly>
  <assemblyIdentity name="Ice" culture="neutral" publicKeyToken="cdd571ade22f2f16"/>
  <bindingRedirect oldVersion="3.6.0.0" newVersion="3.6.1.0"/>
</dependentAssembly>

<dependentAssembly>
  <assemblyIdentity name="IceBox" culture="neutral" publicKeyToken="cdd571ade22f2f16"/>
  <bindingRedirect oldVersion="3.6.0.0" newVersion="3.6.1.0"/>
</dependentAssembly>

</assemblyBinding>
</runtime>
</configuration>

This .config file can be used for iceboxnet.exe (as iceboxnet.exe.config), to load a simple IceBox service built with Ice 3.6.0 with iceboxnet 3.6.1.

Note that cdd571ade22f2f16 is the token corresponding to ZeroC's public key for signing the assemblies in binary distributions. If you build Ice from sources, your assemblies are signed using the development key found in config/IceDevKey.snk. The token for this development key is 1f998c50fec78381.

The advantage of installing the policy assemblies into the GAC is that they establish binary compatibility for all Ice applications, whereas modifying a .config file must be done for each application individually.