我有一个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并没有给我一个有用的错误 - 只是通常的NotFound废话。我在部署这个步骤时是否错过了一个步骤?权限还是什么? dll文件绝对是在ClientBin文件夹中 - 我已经检查过了! :)
答案 0 :(得分: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)
答案 1 :(得分:0)
尝试为已部署的应用程序使用绝对路径,并将您的url + path-to-clietbin作为路径 由于服务器计算机上的路径无效,您可能会收到错误(如果您没有更改它并且它仍然是本地计算机的路径)。
答案 2 :(得分:0)
问题是我正在运行IIS6并且如果不将网站上的执行权限切换为无(这显然会阻止Silverlight应用程序运行),则无法提供dll,因此我合法地获得了404 - 他曾经想过! !
我在我网站的顶层为我的脚本创建了一个虚拟目录,并将dll插入其中,将虚拟执行权限切换为None,将uri更新为../scripts/ControlLibraries.dll和作业a goodun!
答案 3 :(得分:0)
实际上,只需将应用程序的执行权限更改为Scripts,而不是Scripts和Executables,应该可以正常工作。