C# appdomain是否可以限制为一个目录?

C# appdomain是否可以限制为一个目录?,c#,plugins,appdomain,C#,Plugins,Appdomain,我正在开发一个插件主机。插件应该有尽可能少的信任,因为他们需要,但我想有一个插件读写文件的可能性 是否可以将加载程序集的AppDomain限制为只能访问一个目录进行读写 其他的选项和方法也很受欢迎,比如从主机到插件(读取)和从插件到主机(写入)的简单方式 如果相关:我正在为插件使用MAF基础设施。 你说的“C#中的appdomain”是什么意思?AppDomains是.NET框架的一部分,而不是C#的一部分。是的,我的意思是.NET,我只是太习惯C了,它们几乎等同于我:)至于重复的问题,很抱歉,

我正在开发一个插件主机。插件应该有尽可能少的信任,因为他们需要,但我想有一个插件读写文件的可能性

是否可以将加载程序集的AppDomain限制为只能访问一个目录进行读写

其他的选项和方法也很受欢迎,比如从主机到插件(读取)和从插件到主机(写入)的简单方式

如果相关:我正在为插件使用MAF基础设施。

你说的“C#中的appdomain”是什么意思?AppDomains是.NET框架的一部分,而不是C#的一部分。是的,我的意思是.NET,我只是太习惯C了,它们几乎等同于我:)至于重复的问题,很抱歉,我在发布之前没有看到这个问题。这几乎是我所需要的,所以我可以适应它。
namespace ConsoleApplication
{
    #region Imports

    using System;
    using System.IO;
    using System.Security;
    using System.Security.Permissions;

    #endregion

    public class Plugin : MarshalByRefObject
    {        
        public string TestRead(string path)
        {
            try
            {
                File.ReadAllBytes(path);
                return "Done";
            }
            catch (SecurityException)
            {
                return "Access Denied";
            }
        }
    }

    public class Program
    {
        static void Main(string[] args)
        {
            var setup = new AppDomainSetup();

            setup.ApplicationBase = 
                AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

            var perm = new PermissionSet(PermissionState.None);

            perm.AddPermission(
                new SecurityPermission(
                    SecurityPermissionFlag.Execution));

            perm.AddPermission(
                new FileIOPermission(
                    FileIOPermissionAccess.Read, "c:\\public\\"));

            var pluginDomain = 
                AppDomain.CreateDomain("PluginDomain", null, setup, perm);

            var plugin = 
                pluginDomain.CreateInstanceAndUnwrap(
                    typeof(Plugin).Assembly.FullName,
                    typeof(Plugin).FullName) as Plugin;

            Console.WriteLine(plugin.TestRead("c:\\public\\test.txt"));
            Console.WriteLine(plugin.TestRead("c:\\secret\\test.txt"));
            Console.ReadKey();
        }
    }
}