|
問(wèn)題
今天手頭的項(xiàng)目遇到一個(gè)問(wèn)題,為了描述這個(gè)問(wèn)題,我建立了一個(gè)簡(jiǎn)單的項(xiàng)目,結(jié)構(gòu)如下:
1,silverlightApplication1中有一個(gè)按鈕,點(diǎn)擊后彈出窗口;silverlightApplication6中只有一個(gè)canvas來(lái)放置從SilverlightApplication1.dll反射得到的控件。
2,silverlightApplication6中動(dòng)態(tài)加載了silverlightApplication1的SilverlightApplication1.dll文件。
3,如果在RIA上啟動(dòng)新實(shí)例進(jìn)行調(diào)試,可以正常通過(guò)。效果是:
4,但是在web上啟動(dòng)新實(shí)例進(jìn)行調(diào)試就會(huì)報(bào)錯(cuò):會(huì)提示安全性錯(cuò)誤。
解決辦法
經(jīng)過(guò)反復(fù)測(cè)試,還不停的修改策略文件等,最后確定了是DLL的加載路徑的問(wèn)題,錯(cuò)誤的寫法有很多,同事也給出了集中正確的寫法,在此列出其中一種正確的寫法,在這樣的文件結(jié)構(gòu)下:
我們可以這樣寫加載方法:
public MainPage()
{
InitializeComponent();
WebClient web = new WebClient();
web.OpenReadCompleted += new OpenReadCompletedEventHandler(web_OpenReadCompleted);
web.OpenReadAsync(new Uri("SilverlightApplication1.dll", UriKind.RelativeOrAbsolute));
}
void web_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
AssemblyPart part = new AssemblyPart();
Assembly assembly = part.Load(e.Result);
UserControl uc = assembly.CreateInstance("SilverlightApplication1.Box") as UserControl;
this.canvas1.Children.Add(uc);
}
NET技術(shù):Silverlight動(dòng)態(tài)加載DLL,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。