日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Silverlight程序集引用相關(guān)問題解疑

當(dāng)我們在使用Silverlight開發(fā)工具進(jìn)行實(shí)際操作的時(shí)候,并不是一個(gè)一帆風(fēng)順的事情。在變成過程中同樣會(huì)出現(xiàn)各種各樣的問題。在這里我們就為會(huì)為大家解決Silverlight程序集引用的相關(guān)問題。#t#

假定我要用Silverlight類庫實(shí)現(xiàn)一些通用控件,然后在應(yīng)用程序中引用這個(gè)控件庫。當(dāng)然,控件通常也要訪問其他一些第三方或開源的開發(fā)包,例如Silverlight Toolkit。

于是這個(gè)項(xiàng)目的依賴關(guān)系如下: Silverlight Application => Silverlight Control => Silverlight Toolkit。

然后在類庫項(xiàng)目中創(chuàng)建一個(gè)簡單的Silverlight程序集引用控件,比如:

  1. < UserControl x:Class="SLLib.
    TestControl"
  2. xmlns="http://schemas.microsoft.
    com/winfx/2006/xaml/presentation" 
  3. xmlns:x="http://schemas.microsoft.
    com/winfx/2006/xaml" 
  4. xmlns:controlsToolkit="clr-namespace
    :System.Windows.Controls;assembly
    =System.Windows.Controls.Toolkit" 
  5. >
  6. < Grid x:Name="LayoutRoot">
  7. < controlsToolkit:DockPanel>
  8. < /controlsToolkit:DockPanel>
  9. < /Grid>
  10. < /UserControl>

最后,在Silverlight程序集引用中添加我們剛剛創(chuàng)建的控件:

 
 
 
  1. < UserControl x:Class="TestSL.MainPage"
  2. xmlns="http://schemas.microsoft.
    com/winfx/2006/xaml/presentation" 
  3. xmlns:x="http://schemas.microsoft.
    com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft
    .com/expression/blend/2008" 
  5. xmlns:mc="http://schemas.openxml
    formats.org/markup-compatibility/2006" 
  6. mc:Ignorable="d"
  7. xmlns:lib="clr-namespace:SLLib;
    assembly=SLLib">
  8. < Grid x:Name="LayoutRoot">
  9. < lib:TestControl />
  10. < /Grid>
  11. < /UserControl>

這么簡單的程序(一行代碼也沒有),不可能出問題吧?可惜事實(shí)上不是這樣,錯(cuò)誤還是出現(xiàn)了。

那么Silverlight程序集引用出現(xiàn)錯(cuò)誤的原因在哪呢?我們打開.xap 文件看看,就會(huì)發(fā)現(xiàn)問題:Toolkit程序集竟然沒有被包含進(jìn)來!這樣控件運(yùn)行的時(shí)候是無法找到DockPanel類的,程序自然就出錯(cuò)了。

我們可以從其他方面來驗(yàn)證這個(gè)錯(cuò)誤。刪掉原來的控件(其實(shí)不刪也可以) ,從代碼創(chuàng)建一個(gè)控件:

 
 
 
  1. public class TestControl2 :
     ContentControl
  2. {
  3. public TestControl2()
  4. {
  5. this.Content = new DockPanel();
  6. }
  7. }

然后把程序中的TestControl換成TestControl2,再試試看怎么樣?運(yùn)行正常!.xap文件現(xiàn)在也包含Toolkit了。

另一方面,如果我們在應(yīng)用程序的引用中手工加上System.Windows.Controls.Toolkit,那么程序也可以運(yùn)行正常。

這些跡象表明,Silverlight編譯器實(shí)在有點(diǎn)自作聰明。即使我們在類庫引用中明確指定了要引用的程序集,編譯器也會(huì)忽略這些指示,只查找代碼中使用到的那些。對(duì)于你在.xaml中引用的程序集,編譯器根本不予理會(huì)。讓情況更加惡化的是,如果運(yùn)行時(shí)找不到類,那么Silverlight運(yùn)行時(shí)只會(huì)拋出臭名卓著的AG_E_PARSER_BAD_TYPE,這個(gè)毫無內(nèi)容的錯(cuò)誤信息對(duì)查找問題沒有什么幫助。奇怪的是對(duì)于Application類型的項(xiàng)目,Silverlight編譯器的做法則完全不同——只要在項(xiàng)目引用中加入了任何程序集,無論實(shí)際上是否被用到,都會(huì)編譯到最終的.xap文件中。這種不一致的行為是你應(yīng)當(dāng)小心的。

Silverlight程序集引用問題最簡單的work around就是:只要在類庫中引用了哪些程序集,在應(yīng)用程序中也保證引用同樣的程序集,就可以避免出現(xiàn)錯(cuò)誤。顯然這不是一個(gè)很理想的辦法,不僅因?yàn)樗仁钩绦騿T重復(fù)做一些沒有實(shí)際意義的工作,也使得類庫的使用者不得不去關(guān)心類庫的內(nèi)部機(jī)制,從而讓類庫的存在意義大打折扣。


當(dāng)前文章:Silverlight程序集引用相關(guān)問題解疑
標(biāo)題鏈接:http://www.5511xx.com/article/coecgee.html