Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
RelativeSearchPath Property

AppDomain.RelativeSearchPath Property

Gets the path relative to the base directory where the assembly resolver should probe for private assemblies.

[Visual Basic]
Public Overridable ReadOnly Property RelativeSearchPath As String  _
   Implements _AppDomain.RelativeSearchPath
[C#]
public virtual string RelativeSearchPath {get;}
[C++]
public: __property virtual String* get_RelativeSearchPath();
[JScript]
public function get RelativeSearchPath() : String;

Property Value

The path relative to the base directory where the assembly resolver should probe for private assemblies.

Implements

_AppDomain.RelativeSearchPath

Exceptions

Exception Type Condition
AppDomainUnloadedException Operations are attempted on an unloaded application domain.

Remarks

Private assemblies are deployed in the same directory structure as the application.

Example

[Visual Basic] 
Imports System
Imports System.Security.Policy
 'for evidence object

Class ADProperties
    
    Shared Sub Main(args() As String)
        
        Dim setup As New AppDomainSetup()
        ' Shadow copying will not work unless the application has a name.
        setup.ApplicationName = "MyApplication"
        
        'Create evidence for the new application domain from evidence of
        ' current application domain.
        Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence
        
        ' Create a new application domain.
        Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence, setup)
        
        ' MyAssembly.dll is located in the Assemblies subdirectory.
        domain.AppendPrivatePath("Assemblies")
        ' MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
        ' MoreAssemblies subdirectory.
        domain.AppendPrivatePath("MoreAssemblies")
        ' Display the relative search path.
        Console.WriteLine("RelativeSearchPath: " & domain.RelativeSearchPath)
        ' Because Load returns an Assembly object, the assemblies must be
        ' loaded into the current domain as well. This will fail unless the
        ' current domain also has these directories in its search path.
        AppDomain.CurrentDomain.AppendPrivatePath("Assemblies")
        AppDomain.CurrentDomain.AppendPrivatePath("MoreAssemblies")
        
        ' Save shadow copies to C:\Cache
        domain.SetCachePath("C:\Cache")
        ' Shadow copy only the assemblies in the Assemblies directory.
        domain.SetShadowCopyPath(domain.BaseDirectory + "Assemblies")
        ' Turn shadow copying on.
        domain.SetShadowCopyFiles()
        Console.WriteLine("ShadowCopyFiles turned on: " & domain.ShadowCopyFiles)
        
        ' This will be copied.
        ' You must supply a valid fully qualified assembly name here. 
        domain.Load("Assembly1 text name, Version, Culture, PublicKeyToken")
        ' This will not be copied.
        ' You must supply a valid fully qualified assembly name here. 
        domain.Load("Assembly2 text name, Version, Culture, PublicKeyToken")
        
        ' When the shadow copy path is cleared, the CLR will make shadow copies
        ' of all private assemblies.
        domain.ClearShadowCopyPath()
        ' MoreAssemblies\MyThirdAssembly.dll should be shadow copied this time.
        ' You must supply a valid fully qualified assembly name here.
        domain.Load("Assembly3 text name, Version, Culture, PublicKeyToken")
        
        ' Unload the domain.
        AppDomain.Unload(domain)
    End Sub 'Main
End Class 'ADProperties

[C#] 
using System;
using System.Security.Policy;  //for evidence object
namespace AppDomainSnippets
{
    class ADProperties
    {
        static void Main(string[] args)
        {

            AppDomainSetup setup = new AppDomainSetup();
            // Shadow copying will not work unless the application has a name.
            setup.ApplicationName = "MyApplication";

            //Create evidence for the new application domain from evidence of
            // current application domain.
            Evidence adevidence = AppDomain.CurrentDomain.Evidence;
            
            // Create a new application domain.
            AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, setup);
            
            // MyAssembly.dll is located in the Assemblies subdirectory.
            domain.AppendPrivatePath("Assemblies");
            // MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
            // MoreAssemblies subdirectory.
            domain.AppendPrivatePath("MoreAssemblies");
            // Display the relative search path.
            Console.WriteLine("RelativeSearchPath: " + domain.RelativeSearchPath);
            // Because Load returns an Assembly object, the assemblies must be
            // loaded into the current domain as well. This will fail unless the
            // current domain also has these directories in its search path.
            AppDomain.CurrentDomain.AppendPrivatePath("Assemblies");
            AppDomain.CurrentDomain.AppendPrivatePath("MoreAssemblies");
            
            // Save shadow copies to C:\Cache
            domain.SetCachePath("C:\\Cache");
            // Shadow copy only the assemblies in the Assemblies directory.
            domain.SetShadowCopyPath(domain.BaseDirectory + "Assemblies");
            // Turn shadow copying on.
            domain.SetShadowCopyFiles();
            Console.WriteLine("ShadowCopyFiles turned on: " + domain.ShadowCopyFiles);

            // This will be copied.
            // You must supply a valid fully qualified assembly name here. 
            domain.Load("Assembly1 text name, Version, Culture, PublicKeyToken");
            // This will not be copied.
            // You must supply a valid fully qualified assembly name here. 
            domain.Load("Assembly2 text name, Version, Culture, PublicKeyToken");
            
            // When the shadow copy path is cleared, the CLR will make shadow copies
            // of all private assemblies.
            domain.ClearShadowCopyPath();
            // MoreAssemblies\MyThirdAssembly.dll should be shadow copied this time.
            // You must supply a valid fully qualified assembly name here.
            domain.Load("Assembly3 text name, Version, Culture, PublicKeyToken");
            
            // Unload the domain.
            AppDomain.Unload(domain);
        }
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Security::Policy;  //for evidence object

int main()
{

   AppDomainSetup* setup = new AppDomainSetup();
   // Shadow copying will not work unless the application has a name.
   setup->ApplicationName = S"MyApplication";

   //Create evidence for the new application domain from evidence of
   // current application domain.
   Evidence* adevidence = AppDomain::CurrentDomain->Evidence;

   // Create a new application domain.
   AppDomain* domain = AppDomain::CreateDomain(S"MyDomain", adevidence, setup);

   // MyAssembly.dll is located in the Assemblies subdirectory.
   domain->AppendPrivatePath(S"Assemblies");
   // MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
   // MoreAssemblies subdirectory.
   domain->AppendPrivatePath(S"MoreAssemblies");
   // Display the relative search path.
   Console::WriteLine(S"RelativeSearchPath: {0}", domain->RelativeSearchPath);
   // Because Load returns an Assembly object, the assemblies must be
   // loaded into the current domain as well. This will fail unless the
   // current domain also has these directories in its search path.
   AppDomain::CurrentDomain->AppendPrivatePath(S"Assemblies");
   AppDomain::CurrentDomain->AppendPrivatePath(S"MoreAssemblies");

   // Save shadow copies to C:\Cache
   domain->SetCachePath(S"C:\\Cache");
   // Shadow copy only the assemblies in the Assemblies directory.
   domain->SetShadowCopyPath(String::Concat( domain->BaseDirectory, S"Assemblies" ));
   // Turn shadow copying on.
   domain->SetShadowCopyFiles();
   Console::WriteLine(S"ShadowCopyFiles turned on: {0}", __box(domain->ShadowCopyFiles));

   // This will be copied.
   // You must supply a valid fully qualified assembly name here. 
   domain->Load(S"Assembly1 text name, Version, Culture, PublicKeyToken");
   // This will not be copied.
   // You must supply a valid fully qualified assembly name here. 
   domain->Load(S"Assembly2 text name, Version, Culture, PublicKeyToken");

   // When the shadow copy path is cleared, the CLR will make shadow copies
   // of all private assemblies.
   domain->ClearShadowCopyPath();
   // MoreAssemblies\MyThirdAssembly.dll should be shadow copied this time.
   // You must supply a valid fully qualified assembly name here.
   domain->Load(S"Assembly3 text name, Version, Culture, PublicKeyToken");

   // Unload the domain.
   AppDomain::Unload(domain);
}

[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

See Also

AppDomain Class | AppDomain Members | System Namespace

Show:
© 2015 Microsoft