Export (0) Print
Expand All

AssemblyName.VersionCompatibility Property

Gets or sets the information related to the assembly's compatibility with other assemblies.

[Visual Basic]
Public Property VersionCompatibility As _
   AssemblyVersionCompatibility
[C#]
public AssemblyVersionCompatibility VersionCompatibility {get;
   set;}
[C++]
public: __property AssemblyVersionCompatibility get_VersionCompatibility();
public: __property void set_VersionCompatibility(AssemblyVersionCompatibility);
[JScript]
public function get VersionCompatibility() : AssemblyVersionCompatibility;
public function set VersionCompatibility(AssemblyVersionCompatibility);

Property Value

An AssemblyVersionCompatibility object representing information about the assembly's compatibility with other assemblies.

Remarks

VersionCompatibility information indicates, for example, that the assembly cannot execute side-by-side with other versions due to conflicts over a device driver.

Currently, VersionCompatibility always returns SameMachine, and is not used by the loader. This property is reserved for a future feature.

Example

[Visual Basic] 
Imports System
Imports System.Reflection
Imports System.Threading
Imports System.IO
Imports System.Globalization
Imports System.Reflection.Emit
Imports System.Configuration.Assemblies
Imports System.Text
Imports Microsoft.VisualBasic


Public Class AssemblyName_CodeBase
   
   Public Shared Sub MakeAssembly(myAssemblyName As AssemblyName, fileName As String)
      ' Get the assembly builder from the application domain associated with the current thread.
      Dim myAssemblyBuilder As AssemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.RunAndSave)
      ' Create a dynamic module in the assembly.
      Dim myModuleBuilder As ModuleBuilder = myAssemblyBuilder.DefineDynamicModule("MyModule", fileName)
      ' Create a type in the module.
      Dim myTypeBuilder As TypeBuilder = myModuleBuilder.DefineType("MyType")
      ' Create a method called 'Main'.
      Dim myMethodBuilder As MethodBuilder = myTypeBuilder.DefineMethod("Main", MethodAttributes.Public Or MethodAttributes.HideBySig Or MethodAttributes.Static, GetType(object), Nothing)
      ' Get the Intermediate Language generator for the method.
      Dim myILGenerator As ILGenerator = myMethodBuilder.GetILGenerator()
      ' Use the utility method to generate the IL instructions that print a string to the console.
      myILGenerator.EmitWriteLine("Hello World!")
      ' Generate the 'ret' IL instruction.
      myILGenerator.Emit(OpCodes.Ret)
      ' End the creation of the type.
      myTypeBuilder.CreateType()
      ' Set the method with name 'Main' as the entry point in the assembly.
      myAssemblyBuilder.SetEntryPoint(myMethodBuilder)
      myAssemblyBuilder.Save(fileName)
   End Sub 'MakeAssembly
   
   
   Public Shared Sub Main()
      

      ' Create a dynamic assembly with name 'MyAssembly' and build version '1.0.0.2001'.
      Dim myAssemblyName As New AssemblyName()
      ' Set the codebase to the physical directory were the assembly resides.
      myAssemblyName.CodeBase = [String].Concat("file:///", Directory.GetCurrentDirectory())
      ' Set the culture information of the assembly to 'English-American'.
      myAssemblyName.CultureInfo = New CultureInfo("en-US")
      ' Set the hash algoritm to 'SHA1'.
      myAssemblyName.HashAlgorithm = AssemblyHashAlgorithm.SHA1
      myAssemblyName.VersionCompatibility = AssemblyVersionCompatibility.SameProcess
      myAssemblyName.Flags = AssemblyNameFlags.PublicKey
      ' Provide this assembly with a strong name.
      myAssemblyName.KeyPair = New StrongNameKeyPair(File.Open("KeyPair.snk", FileMode.Open, FileAccess.Read))
      myAssemblyName.Name = "MyAssembly"
      myAssemblyName.Version = New Version("1.0.0.2001")
      MakeAssembly(myAssemblyName, "MyAssembly.exe")
      
      ' Get the assemblies loaded in the current application domain.
      Dim myAssemblies As [Assembly]() = Thread.GetDomain().GetAssemblies()
      
      ' Get the dynamic assembly named 'MyAssembly'. 
      Dim myAssembly As [Assembly] = Nothing
      Dim i As Integer
      For i = 0 To myAssemblies.Length - 1
         If [String].Compare(myAssemblies(i).GetName().Name, "MyAssembly") = 0 Then
            myAssembly = myAssemblies(i)
         End If 
      Next i ' Display the full assembly information to the console.
      If Not (myAssembly Is Nothing) Then
      Console.WriteLine(ControlChars.CrLf +"Displaying the full assembly name."+ ControlChars.CrLf)
      Console.WriteLine(myAssembly.GetName().FullName)
      Console.WriteLine(ControlChars.CrLf +"Displaying the public key." + ControlChars.CrLf)
      Dim pk() As Byte
      pk = myAssembly.GetName().GetPublicKey()
      For i = 0 To (pk.GetLength(0)) - 1
         Console.Write("{0:x}", pk(i))
      Next i
      Console.WriteLine()
      Console.WriteLine(ControlChars.CrLf +"Displaying the public key token."+ ControlChars.CrLf)
      Dim pt() As Byte
      pt = myAssembly.GetName().GetPublicKeyToken()
      For i = 0 To (pt.GetLength(0)) - 1
         Console.Write("{0:x}", pt(i))
      Next i
      End If
   End Sub 'Main 
End Class 'AssemblyName_CodeBase 

[C#] 

using System;
using System.Reflection;
using System.Threading;
using System.IO;
using System.Globalization;
using System.Reflection.Emit;
using System.Configuration.Assemblies;
using System.Text;

public class AssemblyName_CodeBase
{
   public static void MakeAssembly(AssemblyName myAssemblyName, string fileName)
   {
      // Get the assembly builder from the application domain associated with the current thread.
      AssemblyBuilder myAssemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.RunAndSave);
      // Create a dynamic module in the assembly.
      ModuleBuilder myModuleBuilder = myAssemblyBuilder.DefineDynamicModule("MyModule", fileName);
      // Create a type in the module.
      TypeBuilder myTypeBuilder = myModuleBuilder.DefineType("MyType");
      // Create a method called 'Main'.
      MethodBuilder myMethodBuilder = myTypeBuilder.DefineMethod("Main", MethodAttributes.Public | MethodAttributes.HideBySig |
         MethodAttributes.Static, typeof(void), null);
      // Get the Intermediate Language generator for the method.
      ILGenerator myILGenerator = myMethodBuilder.GetILGenerator();
      // Use the utility method to generate the IL instructions that print a string to the console.
      myILGenerator.EmitWriteLine("Hello World!");
      // Generate the 'ret' IL instruction.
      myILGenerator.Emit(OpCodes.Ret);
      // End the creation of the type.
      myTypeBuilder.CreateType();
      // Set the method with name 'Main' as the entry point in the assembly.
      myAssemblyBuilder.SetEntryPoint(myMethodBuilder);
      myAssemblyBuilder.Save(fileName);
   }

   public static void Main()
   {
      // Create a dynamic assembly with name 'MyAssembly' and build version '1.0.0.2001'.
      AssemblyName myAssemblyName = new AssemblyName();
      // Set the codebase to the physical directory were the assembly resides.
      myAssemblyName.CodeBase = String.Concat("file:///", Directory.GetCurrentDirectory());
      // Set the culture information of the assembly to 'English-American'.
      myAssemblyName.CultureInfo = new CultureInfo("en-US");
      // Set the hash algoritm to 'SHA1'.
      myAssemblyName.HashAlgorithm = AssemblyHashAlgorithm.SHA1;
      myAssemblyName.VersionCompatibility = AssemblyVersionCompatibility.SameProcess;
      myAssemblyName.Flags = AssemblyNameFlags.PublicKey;
      // Provide this assembly with a strong name.
      myAssemblyName.KeyPair = new StrongNameKeyPair(File.Open("KeyPair.snk", FileMode.Open, FileAccess.Read));
      myAssemblyName.Name = "MyAssembly";
      myAssemblyName.Version = new Version("1.0.0.2001");
      MakeAssembly(myAssemblyName, "MyAssembly.exe");
      
      // Get the assemblies loaded in the current application domain.
      Assembly[] myAssemblies = Thread.GetDomain().GetAssemblies();

      // Get the dynamic assembly named 'MyAssembly'. 
      Assembly myAssembly = null;
      for(int i = 0; i < myAssemblies.Length; i++)
         if(String.Compare(myAssemblies[i].GetName().Name, "MyAssembly") == 0)
            myAssembly = myAssemblies[i];

      // Display the full assembly information to the console.
      if(myAssembly != null)
      {
         Console.WriteLine("\nDisplaying the full assembly name.\n");
         Console.WriteLine(myAssembly.GetName().FullName);
         Console.WriteLine("\nDisplaying the public key.\n");
         byte []pk;
         pk = myAssembly.GetName().GetPublicKey();
      for (int i=0;i<pk.GetLength(0);i++)
         Console.Write ("{0:x}", pk[i]);
         Console.WriteLine();
         Console.WriteLine("\nDisplaying the public key token.\n");
         byte []pt;
         pt = myAssembly.GetName().GetPublicKeyToken();
      for (int i=0;i<pt.GetLength(0);i++)
         Console.Write ("{0:x}", pt[i]);
      }
   }
}

[C++] 

#using <mscorlib.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Threading;
using namespace System::IO;
using namespace System::Globalization;
using namespace System::Reflection::Emit;
using namespace System::Configuration::Assemblies;
using namespace System::Text;

static void MakeAssembly(AssemblyName* myAssemblyName, String* fileName)
{
   // Get the assembly builder from the application domain associated with the current thread.
   AssemblyBuilder* myAssemblyBuilder = Thread::GetDomain()->DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess::RunAndSave);
   // Create a dynamic module in the assembly.
   ModuleBuilder* myModuleBuilder = myAssemblyBuilder->DefineDynamicModule(S"MyModule", fileName);
   // Create a type in the module.
   TypeBuilder* myTypeBuilder = myModuleBuilder->DefineType(S"MyType");
   // Create a method called 'Main'.
   MethodBuilder* myMethodBuilder = myTypeBuilder->DefineMethod(S"Main",
      static_cast<MethodAttributes>( MethodAttributes::Public | MethodAttributes::HideBySig | MethodAttributes::Static ),
      __typeof(void), 0);
   // Get the Intermediate Language generator for the method.
   ILGenerator* myILGenerator = myMethodBuilder->GetILGenerator();
   // Use the utility method to generate the IL instructions that print a String* to the console.
   myILGenerator->EmitWriteLine(S"Hello World!");
   // Generate the 'ret' IL instruction.
   myILGenerator->Emit(OpCodes::Ret);
   // End the creation of the type.
   myTypeBuilder->CreateType();
   // Set the method with name 'Main' as the entry point in the assembly.
   myAssemblyBuilder->SetEntryPoint(myMethodBuilder);
   myAssemblyBuilder->Save(fileName);
}

int main() {
   // Create a dynamic assembly with name 'MyAssembly' and build version '1.0.0.2001'.
   AssemblyName* myAssemblyName = new AssemblyName();
   // Set the codebase to the physical directory were the assembly resides.
   myAssemblyName->CodeBase = String::Concat(S"file:///", Directory::GetCurrentDirectory());
   // Set the culture information of the assembly to 'English-American'.
   myAssemblyName->CultureInfo = new CultureInfo(S"en-US");
   // Set the hash algoritm to 'SHA1'.
   myAssemblyName->HashAlgorithm = AssemblyHashAlgorithm::SHA1;
   myAssemblyName->VersionCompatibility = AssemblyVersionCompatibility::SameProcess;
   myAssemblyName->Flags = AssemblyNameFlags::PublicKey;
   // Provide this assembly with a strong name.
   myAssemblyName->KeyPair = new StrongNameKeyPair(File::Open(S"KeyPair.snk", FileMode::Open, FileAccess::Read));
   myAssemblyName->Name = S"MyAssembly";
   myAssemblyName->Version = new Version(S"1.0.0.2001");
   MakeAssembly(myAssemblyName, S"MyAssembly.exe");

   // Get the assemblies loaded in the current application domain.
   Assembly* myAssemblies[] = Thread::GetDomain()->GetAssemblies();

   // Get the dynamic assembly named 'MyAssembly'. 
   Assembly* myAssembly = 0;
   for (int i = 0; i < myAssemblies->Length; i++)
      if (String::Compare(myAssemblies[i]->GetName()->Name, S"MyAssembly") == 0)
         myAssembly = myAssemblies[i];

   // Display the full assembly information to the console.
   if (myAssembly != 0) {
      Console::WriteLine(S"\nDisplaying the full assembly name.\n");
      Console::WriteLine(myAssembly->GetName()->FullName);
      Console::WriteLine(S"\nDisplaying the public key.\n");
      Byte pk[];
      pk = myAssembly->GetName()->GetPublicKey();
      for (int i=0;i<pk->GetLength(0);i++)
         Console::Write (S" {0:x}", pk->Item[i]);
      Console::WriteLine();
      Console::WriteLine(S"\nDisplaying the public key token.\n");
      Byte pt[];
      pt = myAssembly->GetName()->GetPublicKeyToken();
      for (int i=0;i<pt->GetLength(0);i++)
         Console::Write (" {0:x}", pt->Item[i]);
   }
}

[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button Language Filter in the upper-left corner of the page.

Requirements

Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family, .NET Compact Framework

See Also

AssemblyName Class | AssemblyName Members | System.Reflection Namespace

Show:
© 2014 Microsoft