2011-01-25 9 views
0

実行時に相対URLを使用してClientBinフォルダ内にあるdllファイルをロードするSilverlightアプリケーションがあります。それは私のローカルマシン上で素晴らしい作品が、ここではサーバー上にデプロイするとき、常にファイルをロードしようとしたときに失敗しているようだ:コースのSilverlightSilverlightエラー実行時にdllをロードする

private void OnAssemblyOpened(object sender, OpenReadCompletedEventArgs e) 
{ 
    AssemblyPart asmbPart = new AssemblyPart(); 

    MessageBox.Show(e.ToString()); 
    Assembly asmb = asmbPart.Load(e.Result) // this line causes the exception 
    ... 
} 

することは私に便利なエラーを与えるものではありません - ちょうどいつものナンセンスを知らない。これを展開するのに欠けているステップはありますか?パーミッションか何か? dllファイルは確かにClientBinフォルダにありますbtw - 私はそれをチェックしました! :)

答えて

0

問題は私がIIS6を実行していて、dllがサイトの実行許可をNone(Silverlightアプリケーションが実行されていないことを明らかにしている)に切り替えることなしに提供できないためです。 !!

自分のサイトのトップレベルにスクリプトの仮想ディレクトリを作成し、そこにdllを張り、仮想の実行権限をNoneに変更し、uriを../scripts/ControlLibraries.dllに更新し、ジョブ良い人よ!

0

デプロイされたアプリケーションに絶対パスを使用して、あなたのURL + path-to-clietbinをパスとして指定してください。
サーバマシン上の無効なパスのためにエラーが発生することがあります(変更していない場合でもローカルマシンのパスです)。

1

もう1つの方法は、dllをzipファイルに圧縮し、zipファイルをダウンロードすることです。そうすれば、サーバーの設定で遊ぶ必要はありません。

ファイルをZipファイルからダウンロードして解凍する方法は、answerに記載されています。本質的には

コードは次のようになります -

AssemblyPart asmbPart = new AssemblyPart(); 

var zipRes = new StreamResourceInfo(args.Result, null) 
var assemRes = Application.GetResourceStream(zipRes, new Uri("YourAssembly.dll", UriKind.Relative)); 

Assembly asmb = asmbPart.Load(assemRes.Stream) 
+0

私はこれをテストしていませんが、IISへのアクセスの贅沢を持たない人にとっては素晴らしいソリューションと思われます –

0

実際には、だけではなく、スクリプトおよび実行可能ファイルを、スクリプトのみに、アプリケーションの実行権限を変更し、正常に動作する必要があります。

関連する問題