2011-10-10 37 views
1

加载程序集在Silverlight 4应用程序我试图实例化一个对象,它的类型不知道,直到运行时,:无法使用此代码在强烈签署的Silverlight代码

Assembly assembly = Assembly.LoadFrom("Name.Of.Some.dll"); 
Type type = assembly.GetType("Full.NameSpace.And.ClassName"); 
object o = Activator.CreateInstance(type); 

然而, Assembly.LoadFrom()调用会导致一个例外:

{System.MethodAccessException: Attempt by security transparent method 'Mosaic.Layers.LayerParamChangeHandlerInfo.CreateParamHandler()' to access security critical method 'System.Reflection.Assembly.LoadFrom(System.String)' failed. 

我做了一些谷歌搜索的错误,但我仍然无法弄清楚,为什么我得到异常(一些相关的组件是我相信这是强烈的签名),更重要的是,如何解决问题并创造我的客体。

回答

2

您不允许从您自己的代码中调用此方法,导致其安全性至关重要,并且只能在.NET Framework内部使用。

请勿在您的应用程序中使用此成员。如果你这样做,你的代码将抛出一个MethodAccessException。此成员对安全至关重要,它将.NET Framework for Silverlight类库限制为内部使用。

在Silverlight中,程序集唯一可用的Load方法是Assembly.Load(string)。如果要动态加载程序集,请参见this方法。

+0

查看Assembly.LoadString()的文档,所需的参数是完整的程序集名称,但不清楚到底是什么在我的情况。我尝试了“Name.Of.Some.dll”和“Name.Of.Some”,它们都导致FileNotFoundException。 而且,除非我误读它,否则您链接的文章使用流加载 - 我没有流 - 只是需要实例化的程序集和类的名称。 –

+0

@Dave W:装配位于哪里,你正在装载?你是否在浏览器外运行你的Silverlight应用程序? – Jehof

+0

@Dave W:我认为你需要指定完整的程序集名称,包括版本,文化和公钥标记。看到这个问题http://stackoverflow.com/questions/3015513/silverlight-assembly-load-only-works-with-the-full-strong-name – Jehof