AppDomain.SetShadowCopyPath Method (String)


The .NET API Reference documentation has a new home. Visit the .NET API Browser on to see the new experience.

obsoleteCodeEntityP:System.AppDomainSetup.ShadowCopyDirectories Note: This API is now obsolete.

Establishes the specified directory path as the location of assemblies to be shadow copied.

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

[ObsoleteAttribute("AppDomain.SetShadowCopyPath has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyDirectories instead.")]
public void SetShadowCopyPath(
	string path


Type: System.String

A list of directory names, where each name is separated by a semicolon.

Exception Condition

The operation is attempted on an unloaded application domain.

By default, a shadow copy includes all assemblies found through probing. The SetShadowCopyPath method restricts the shadow copy to the assemblies in the directories specified by path.

The SetShadowCopyPath method does not specify additional directories to be searched for assemblies. Assemblies to be shadow-copied must already be located in the search path, for example under BaseDirectory. The SetShadowCopyPath method specifies which search paths are eligible to be shadow-copied.

This method sets the ShadowCopyDirectories property of the internal AppDomainSetup associated with this instance.

For more information on shadow copying, see Shadow Copying Assemblies.

This method is now obsolete, and should not be used for new development.

using System;
using System.Security.Policy;  //for evidence object
namespace AppDomainSnippets
	class ADShadowCopy
		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.
			// MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
			// MoreAssemblies subdirectory.
			// 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.

			// Save shadow copies to C:\Cache
			// Shadow copy only the assemblies in the Assemblies directory.
			domain.SetShadowCopyPath(domain.BaseDirectory + "Assemblies");
			// Turn shadow copying on.

			// 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.
			// 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.


requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

.NET Framework
Available since 1.1
Return to top