我正在研究动态(在运行时)加载dll的程序
例如:Microsoft.AnalysisServices.dll
。
在这个dll中我们有这个枚举:
namespace Microsoft.AnalysisServices
{
[Flags]
public enum UpdateOptions
{
Default = 0,
ExpandFull = 1,
AlterDependents = 2,
}
}
我们也有class Cube
:
namespace Microsoft.AnalysisServices
{
public sealed class Cube : ...
{
public Cube(string name);
public Cube(string name, string id);
..
..
..
}
}
我动态加载此dll并创建对象Cube
。比我调用方法Cube.Update()
。此方法将Cube部署到SQL Analysis服务器。但如果我想打电话
这个方法带参数Cube.Update(UpdateOptions.ExpandFull)
我得到错误,因为方法没有得到合适的参数。
我已经尝试了这个,但不起作用:
dynamic updateOptions = AssemblyLoader.LoadStaticAssembly("Microsoft.AnalysisServices", "Microsoft.AnalysisServices.UpdateOptions");//my class for loading assembly
Array s = Enum.GetNames(updateOptions);
dynamic myEnumValue = s.GetValue(1);//1 = ExpandFull
dynamicCube.Update(myEnumValue);// == Cube.Update(UpdateOptions.ExpandFull)
我知道错误在参数myEnumValue
中,但我不知道如何从程序集中获取动态枚举类型并将其传递给方法。有人知道解决方案吗?
非常感谢您的回答和帮助!
答案 0 :(得分:0)
所有枚举都可以与其基本类型相同。在这种情况下,UpdateOptions的基本类型是int,因此您只需将值1传递给dynamicCube.Update,如下所示:
dynamicCube.Update(1)
您无需为动态枚举类型位烦恼。
答案 1 :(得分:0)
我找到了解决方案。代码是这样的:
dynamic assembly = AssemblyLoader.LoadStaticAssembly("Microsoft.AnalysisServices", Microsoft.AnalysisServices.UpdateOptions");
dynamic expandFull = (Enum)Enum.Parse(assembly, "ExpandFull", true);
dynamicCub.Update(expandFull);
它有效!
此致