我有一个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文件夹btw中-我已经检查过了!:)
发布于 2011-01-25 23:17:06
问题是,我正在运行IIS6,如果不将站点上的执行权限切换为None (这显然会阻止Silverlight应用程序运行),就无法提供dll,所以我合法地获得了404 -谁会想到!!
我在站点的顶层为我的脚本创建了一个虚拟目录,并将dll放在其中,将虚拟目录的执行权限切换为None,将uri更新为../ scripts /ControlLibraries.dll,作业很棒!
发布于 2011-01-25 23:37:34
另一种选择是将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)发布于 2011-01-25 23:07:16
尝试对已部署的应用程序使用绝对路径,并将url + path- to -clietbin指定为path。
您可能会因为服务器计算机上的无效路径而收到错误(如果您没有更改它,并且它仍然是您本地计算机的路径)。
https://stackoverflow.com/questions/4794658
复制相似问题