小编Scr*_*ile的帖子

os.MkDir和os.MkDirAll权限值?

我正在尝试在程序开始时创建一个日志文件.

我需要检查是否存在"/ log"目录,如果它不创建目录,则继续创建日志文件.

好吧,我试图使用os.Mkdir(以及os.MkDirAll),但无论我在第二个参数中放入什么值,我都会得到一个没有权限的锁定文件夹.为了获得用户文件夹的读/写,这应该是什么值?我以为它会是0x700,但它似乎不起作用.

谢谢!

go

50
推荐指数
5
解决办法
4万
查看次数

动态加载DLL

我有一个程序,需要使用大量的插件.

每个插件必须支持一个非常基本的接口,这个接口是在DLL中定义的(IBaseComponent是为了简化问题).

每个插件都在特定目录中(AppDirectory\plugin\plugin-type).每个插件都可以有插件的dll的任何名称(AppDirectory\plugin\plugin-type\plugin-name.dll).

所以我需要检查每个plugin子目录,找到每个插件都有一个支持IBaseComponent接口的类,实例化该类并调用插件上的一些函数.

好吧,一切都很好,花花公子,这一切都不是特别难.但问题是我似乎遇到了一些奇怪的问题.

每个插件都需要有在各个插件文件夹中的文件Base.dll(而不是仅仅在将被加载插件程序),也似乎我得到许多错误和警告周围的动态加载具有DLL的还一个dll需要加载.

我正在使用:

pluginModule = System.Reflection.Assembly.ReflectionOnlyLoadFrom(PathToAssembly);
Run Code Online (Sandbox Code Playgroud)

为了获取插件dll并使用:

types = moduleAssembly.GetTypes();
Run Code Online (Sandbox Code Playgroud)

为了获取dll中包含的类型.我正在遍历类型并检查单个类型是否属于IBaseComponent接口(表示这对于加载类是有效的):

if (type.GetInterface("FrameworkNameSpace.IBaseComponent") != null)
    //it's of the IBaseComponent interface
Run Code Online (Sandbox Code Playgroud)

稍后,为了从我使用的dll实际创建类的实例:

pluginModule = System.Reflection.Assembly.LoadFrom(PathToAssembly);
Run Code Online (Sandbox Code Playgroud)

然后使用:

types = component.GetTypes();
Run Code Online (Sandbox Code Playgroud)

为了获取模块中的类型,然后选择并加载支持与上面相同的接口的类.

当我使用时,问题似乎就出现了:

types = component.GetTypes();
Run Code Online (Sandbox Code Playgroud)

当实际尝试加载类时,而不是简单地看着它.(因此我对LoadFromReflectionOnlyLoad的不同用法)

我在GetTypes调用上收到的异常(在第二个插件上,但从来没有第一个!)是:

{"Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information."}
Run Code Online (Sandbox Code Playgroud)

使用LoaderExceptions属性:

{"The specified module could not be found. (Exception from HRESULT: 0x8007007E)":null}
Run Code Online (Sandbox Code Playgroud)

我不确定为什么会这样.DLL位于plugin文件夹中,包含IBaseComponent接口的DLL也位于每个插件目录中.我是以错误的方式来做这件事的吗?

也就是保持每个插件子目录以及程序本身使用的一个内含有IBaseComponent的DLL的一个副本就需要我,还是我做一些错误,让我删除这一要求?

我知道MEF这是我想要使用但不幸的是因为我需要在.net 2.0上支持这个我无法使用MEF.

.net c# dll plugins interface

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

.net ×1

c# ×1

dll ×1

go ×1

interface ×1

plugins ×1