This documentation is archived and is not being maintained.

AssemblyBuilder.DefineVersionInfoResource Method

Defines an unmanaged version information resource using the information specified in the assembly's AssemblyName object and the assembly's custom attributes.

Namespace:  System.Reflection.Emit
Assembly:  mscorlib (in mscorlib.dll)

public void DefineVersionInfoResource()


An unmanaged version information resource was previously defined.


The unmanaged version information is too large to persist.


The caller does not have the required permission.

An assembly can be associated with only one unmanaged resource. This means that calling DefineVersionInfoResource or DefineUnmanagedResource after either one of the methods was called previously will throw the System.ArgumentException. Multiple unmanaged resources need to be merged with a tool such as the Microsoft ResMerge utility (not supplied with the common language runtime SDK).

Empty argument strings get written as a single space. Spaces are substituted for null characters in the argument strings.

The information is inferred from the AssemblyName object used to define this dynamic assembly. This assembly's custom attributes override information specified in the AssemblyName object.


Starting with the .NET Framework version 2.0 Service Pack 1, this member no longer requires ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. (See Security Issues in Reflection Emit.) To use this functionality, your application should target the .NET Framework version 3.5 or later.

The example below illustrates the usage of DefineVersionInfoResource.

using System;
using System.Reflection;
using System.Reflection.Emit;

class Example
   public static void Main()
      AssemblyName assemName = new AssemblyName();
      assemName.Name = "EmittedAssembly";

      // Create a dynamic assembly in the current application domain,
      // specifying that the assembly is to be saved.
      AssemblyBuilder myAssembly = 

      // To apply an attribute to a dynamic assembly, first get the 
      // attribute type. The AssemblyFileVersionAttribute sets the 
      // File Version field on the Version tab of the Windows file
      // properties dialog.
      Type attributeType = typeof(AssemblyFileVersionAttribute);

      // To identify the constructor, use an array of types representing
      // the constructor's parameter types. This ctor takes a string.
      Type[] ctorParameters = { typeof(string) };

      // Get the constructor for the attribute.
      ConstructorInfo ctor = attributeType.GetConstructor(ctorParameters);

      // Pass the constructor and an array of arguments (in this case,
      // an array containing a single string) to the 
      // CustomAttributeBuilder constructor.
      object[] ctorArgs = { "2.0.3033.0" };
      CustomAttributeBuilder attribute = 
         new CustomAttributeBuilder(ctor, ctorArgs);

      // Finally, apply the attribute to the assembly.

      // The pattern described above is used to create and apply
      // several more attributes. As it happens, all these attributes
      // have a constructor that takes a string, so the same ctorArgs
      // variable works for all of them.

      // The AssemblyTitleAttribute sets the Description field on
      // the General tab and the Version tab of the Windows file 
      // properties dialog.
      attributeType = typeof(AssemblyTitleAttribute);
      ctor = attributeType.GetConstructor(ctorParameters);
      ctorArgs = new object[] { "The Application Title" };
      attribute = new CustomAttributeBuilder(ctor, ctorArgs);

      // The AssemblyCopyrightAttribute sets the Copyright field on
      // the Version tab.
      attributeType = typeof(AssemblyCopyrightAttribute);
      ctor = attributeType.GetConstructor(ctorParameters);
      ctorArgs = new object[] { "� My Example Company 1991-2005" };
      attribute = new CustomAttributeBuilder(ctor, ctorArgs);

      // The AssemblyDescriptionAttribute sets the Comment item.
      attributeType = typeof(AssemblyDescriptionAttribute);
      ctor = attributeType.GetConstructor(ctorParameters);
      attribute = new CustomAttributeBuilder(ctor, 
         new object[] { "This is a comment." });

      // The AssemblyCompanyAttribute sets the Company item.
      attributeType = typeof(AssemblyCompanyAttribute);
      ctor = attributeType.GetConstructor(ctorParameters);
      attribute = new CustomAttributeBuilder(ctor, 
         new object[] { "My Example Company" });

      // The AssemblyProductAttribute sets the Product Name item.
      attributeType = typeof(AssemblyProductAttribute);
      ctor = attributeType.GetConstructor(ctorParameters);
      attribute = new CustomAttributeBuilder(ctor, 
         new object[] { "My Product Name" });

      // Define the assembly's only module. For a single-file assembly,
      // the module name is the assembly name.
      ModuleBuilder myModule = 
            assemName.Name + ".exe");

      // No types or methods are created for this example.

      // Define the unmanaged version information resource, which
      // contains the attribute informaion applied earlier, and save
      // the assembly. Use the Windows Explorer to examine the properties
      // of the .exe file.
      myAssembly.Save(assemName.Name + ".exe");


.NET Framework

Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.