none
Application.GetResourceStream 怎么回事? 有关文件锁定 RRS feed

  • 问题

  • StreamResourceInfo streamInfo = Application.GetResourceStream(
    new Uri("UIOnly;component/Images/my_work.png", UriKind.Relative));

     if ((streamInfo != null) && (streamInfo.Stream != null))
    {
                   
                    using (var stream = streamInfo.Stream)
                    {

                    }
    }

    uionly.dll是独立的一个文件, 跟主程序没有别的关联, 执行完上面的代码后, uionly.dll就被锁定了, 删除不了, 这是为什么呢??我可是啥都没干啊...
    2011年1月7日 4:33

答案

全部回复

  • 因为这个文件被Appdomain载入了,你只有释放AppDomain才可以解锁。
    Best day, Best life
    2011年1月9日 5:57
  • 你好 永乐,

    我觉得Jarrey已经给你一个解决方案, 我将把你的帖子标记为已解答,这样有利于和你有一样问题的 论坛的其他成员 通过你的帖子找到问题的解决方案或者方向。

    如果你觉得这个答案对你没有任何帮助,你也可以取消标记为答案,并且告诉我们你现在存在的疑惑, 我们将尽量为你解决问题。

     

    Best regards,


    Sheldon _Xiao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年1月14日 13:13
    版主
  • 能告诉我为什么要这么设计吗?

    这个api从字面意义上看,只是从一个文件中读取资源, 为何要用appdomian载入?

     

    2011年1月15日 3:55
  • 首先,这个资源是在一个程序集里的。运行时如果不把程序集载入内存,你是无法取得这个资源的;其次,程序集要载入,那么需要进入当前AppDomain, 而当前AppDomain就会锁住这个程序集。

    这个是CLR运行时的规则,很容易看到。你运行一个程序时,你是不能移动和剪切这个程序正在使用的dll文件的。

     


    Best day, Best life
    2011年1月16日 5:28
  • 还是不明白, 想取得资源可以把程序集当普通文件载入内存进行解析, 为什么非得当成一个程序载入?
    2011年3月17日 1:48
  • 还是不明白, 想取得资源可以把程序集当普通文件载入内存进行解析, 为什么非得当成一个程序载入?

    这个当然也是可行的了,如果你熟悉PE文件格式,能够使用代码去解析PE文件,这里也就是你的包含资源的DLL文件,你就可以当作一般的文件读入内存,进行解析,取得里面的资源。否则,最简单的就是当作程序集加载进入你的当前AppDimain然后取得里面的资源。

     

    关于PE有很多内容,特别是.Net程序集的PE,是比较特殊的,你可以参考这些:


    J


    Best day, Best life
    2011年3月17日 5:20
  • 我是说为什么Application.GetResourceStream不这么设计呢?

    非要载入程序集, 而且不能unload

    2011年3月17日 9:05
  • 已经这么设计了, .Net框架就是这么规定的,一个程序集被载入到AppDomain中 除非这个AppDomain Unload ,否则这个 程序集是无法Unload的。 你这样纠结这个本质上的设计问题是没用的。Application.GetResourceStream这么设计肯定有他的理由,你可以反编译看看他的代码,肯定用了反射把程序集载进来,而不是读文件。如果你真的很感兴趣为什么这么设计,你只有去联系微软的设计人员了,这边论坛是蛮办法帮你解答的。那帮微软大牛决定这个设计,我们也只能照着做了
    Best day, Best life
    2011年3月17日 10:02