.Net support notes
Since version 3.1, Tarma Installer supports the installation of .Net assemblies
with the following features:
- A requirements check for the .Net runtime.
- Two variables (MsiNetAssemblySupport
and VersionCLR)
to check the .Net runtime version elsewhere in the project.
- Detection of .Net assemblies when you add new files to the project.
- An Assembly-type
of component;
- Installation of both private and global assemblies (the latter into the
GAC).
All this functionality is built into the installer; no external tools such
as GACUTIL.exe are required.
Adding .Net assemblies to your project
The easiest way to add .Net assemblies to your Tarma Installer project
is to add them as installation files. Tarma Installer will detect .Net
assemblies and create separate assembly-type
components for them with the required settings.
To add .Net assemblies manually, do the following:
- On the Features and Components project page, create a new Assembly
object.
- Set the Assembly type to either .Net, Private (for a private
assembly) or .Net, Global (for global assemblies, see below).
- Click the ... (browse) button to the right of the Manifest file field
and select the manifest file for the assembly.
- Add the installation file that contains the .Net manifest to the newly
created assembly (right-click on the assembly object in the Components
and Assemblies tree, then choose Add Object...).
- If necessary, add any further non-manifest files and other installation
resources to the assembly in the same manner. Note that all files in the
assembly must be installed in the same folder.
Global assemblies
By default, assemblies are assumed to be private to your application; if you
want register them as global assemblies, you must do the following:
- Ensure that all your assembly manifest files are signed and contain a
public key or public key token. This is required to generate a strong
name for the assembly.
- Install the assemblies in the GlobalAssemblyCache folder in your
Tarma Installer project. You can find this folder as Target System\Windows\assembly.
- Set the Assembly type to .Net, Global.
Tarma Installer will produce a number of diagnostic warnings if you build
a project that does not conform to these requirements. DO NOT IGNORE
these warnings.
COM interop registration
There is no built-in support yet for COM interop registration. The recommended
approach to register your .Net assemblies for backward compatibility with
COM is as follows:
- Add the .Net assembly files to the Tarma Workshop project. This will detect
the assemblies and create corresponding Assembly-Components
for them.
- Separately, run regasm yourassembly.dll /regfile on each of the
assemblies that require COM interoperability. You might want to add /codebase,
but only if your assemblies are signed and contain a public key (or token).
- Back in Tarma Workshop, import the REGEDIT4 files produced by the previous
step into your project. When asked, add them to the component that corresponds
to the assembly to which they belong.
You can find the regasm.exe tool in the .Net installation folder on
your system, typically C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
or something similar.
Detection of .Net
The simplest method of checking for .Net runtime support is to specify it
as a System Requirement
in your Tarma Workshop project. However, this simply prevents installation
if the correct .Net version is not present on the system, without opportunity
to install it.
An alternative method is therefore to NOT list .Net as a system requirement,
but to use conditional actions to warn the user of a missing .Net runtime
and/or to install it.
There are two variables that you can use in the conditions.
MsiNetAssemblySupport
MsiNetAssemblySupport contains the dotted-decimal CLR version number, for example
1.1.4322.2032. You can use this one in conditional expressions like:
<$vercmp(<MsiNetAssemblySupport>, 1.1)> >= 0
VersionCLR
VersionCLR contains the CLR version number encoded as 1000 * major + 10 *
minor:
- .Net 1.0 = 1000
- .Net 1.1 = 1010
- .Net 2.0 = 2000
This one can be used more easily:
VersionCLR >= 1010
Installation of .Net runtime
See How to install the .Net runtime