zoukankan      html  css  js  c++  java
  • 一起谈.NET技术,Silverlight动态加载DLL 狼人:

      问题

      今天手头的项目遇到一个问题,为了描述这个问题,我建立了一个简单的项目,结构如下:

    image   问题是这样的:

      1,silverlightApplication1中有一个按钮,点击后弹出窗口;silverlightApplication6中只有一个canvas来放置从SilverlightApplication1.dll反射得到的控件。

      2,silverlightApplication6中动态加载了silverlightApplication1的SilverlightApplication1.dll文件。

      3,如果在RIA上启动新实例进行调试,可以正常通过。效果是:

    image

      4,但是在web上启动新实例进行调试就会报错:会提示安全性错误。

      解决办法

      经过反复测试,还不停的修改策略文件等,最后确定了是DLL的加载路径的问题,错误的写法有很多,同事也给出了集中正确的写法,在此列出其中一种正确的写法,在这样的文件结构下:

    image

      我们可以这样写加载方法:

    public MainPage()
    {
    InitializeComponent();
    WebClient web
    = new WebClient();
    web.OpenReadCompleted
    += new OpenReadCompletedEventHandler(web_OpenReadCompleted);
    web.OpenReadAsync(
    new Uri("SilverlightApplication1.dll", UriKind.RelativeOrAbsolute));
    }

    void web_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
    AssemblyPart part
    = new AssemblyPart();
    Assembly assembly
    = part.Load(e.Result);

    UserControl uc
    = assembly.CreateInstance("SilverlightApplication1.Box") as UserControl;
    this.canvas1.Children.Add(uc);
    }

      源码下载:SilverlightDynDll

  • 相关阅读:
    LeetCode 842. Split Array into Fibonacci Sequence
    LeetCode 1087. Brace Expansion
    LeetCode 1219. Path with Maximum Gold
    LeetCode 1079. Letter Tile Possibilities
    LeetCode 1049. Last Stone Weight II
    LeetCode 1046. Last Stone Weight
    LeetCode 1139. Largest 1-Bordered Square
    LeetCode 764. Largest Plus Sign
    LeetCode 1105. Filling Bookcase Shelves
    LeetCode 1027. Longest Arithmetic Sequence
  • 原文地址:https://www.cnblogs.com/waw/p/2162806.html
Copyright © 2011-2022 走看看