Silverlight在运行时加载dll时出错

Silverlight在运行时加载dll时出错,silverlight,Silverlight,我有一个silverlight应用程序,它在运行时通过相对Uri加载位于ClientBin文件夹中的dll文件。它在我的本地机器上工作得很好,但是当部署在这里的服务器上时,它似乎在尝试加载文件时不断失败: private void OnAssemblyOpened(object sender, OpenReadCompletedEventArgs e) { AssemblyPart asmbPart = new AssemblyPart(); MessageBox.Show

我有一个silverlight应用程序,它在运行时通过相对Uri加载位于ClientBin文件夹中的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
    ...
}

当然,silverlight并没有给我一个有用的错误——只是通常的“未发现的废话”。在部署这个过程中,我是否错过了一个步骤?权限还是什么?dll文件肯定在ClientBin文件夹中(顺便说一句-我已经检查过了!)

尝试为部署的应用程序使用绝对路径,并将clietbin的url+路径作为路径。

您可能会因为服务器计算机上的路径无效而出错(如果您没有更改它,并且它仍然是本地计算机的路径)。

问题是我正在运行IIS6,如果不将站点上的执行权限切换为“无”,则无法提供dll(这显然会阻止Silverlight应用程序运行)所以我得到了一个404,谁会想到


我在我的站点的顶层为我的脚本创建了一个虚拟目录,并将dll插入其中,将虚拟脚本的执行权限切换为“无”,将uri更新为../scripts/ControlLibraries.dll,作业很好

另一个选项是将dll压缩到zip文件中,然后下载zip文件。这样,您就不需要使用服务器配置

本文给出了如何从Zip文件下载和解压缩文件

代码本质上如下所示:-

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)

实际上,只需将应用程序上的执行权限更改为仅脚本,而不是脚本和可执行文件,就可以正常工作。

我还没有测试过这一点,但对于那些无法访问IIS的用户来说,这似乎是一个不错的解决方案