2011-01-25 93 views
0

我有一个silverlight应用程序在运行时通过相对Uri加载位于ClientBin文件夹内的dll文件。它在我的本地机器上的伟大工程,但在这里,在服务器上部署的时候,它似乎在试图加载文件不断地失败:在运行时加载dll时出现Silverlight错误

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

问题是我正在运行IIS6,并且无法将网站上的执行权限切换为无(这显然会阻止Silverlight应用程序运行),因此我合法地获得404 - 谁会想到!

我在我的网站的顶层为我的脚本创建了一个虚拟目录,并将dll卡在那里,将虚拟执行权限切换为无,将uri更新为../scripts/ControlLibraries.dll和作业好的!

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) 
+0

我还没有测试过这个,但对于那些没有访问IIS的人来说,它似乎是一个很好的解决方案 – 2011-01-26 09:30:19

0

其实,只要改变你的应用程序,以纯脚本,而不是脚本和可执行文件的执行权限,应该工作正常。