Icomparer实现出错。请帮忙 !

时间:2010-11-12 13:49:10

标签: asp.net vb.net sorting icomparer

我创建了一个数组排序器,用于在DNN模块中的Win Explorer中对数组进行排序。与预览问题的答案一样:

Sorting an array of folder names like Windows Explorer (Numerically and Alphabetically) - VB.NET

用户每次运行模块时都会收到以下错误(下面),我不是一个特别老练的ASP.NET开发人员。是否导致此错误,因为我在IComparer中使用了StrCmpLogicalW,并且正在不支持StrCmpLogicalW的平台上使用。或者是由于权限问题引起的。

任何帮助都很受欢迎,

非常感谢。

这是导致错误的分拣机。

Public Class nvSorter
    Implements IComparer(Of String)

    Declare Unicode Function StrCmpLogicalW Lib "shlwapi.dll" ( _
        ByVal s1 As String, _
        ByVal s2 As String) As Int32

    Public Function Compare(ByVal x As String, ByVal y As String) As Integer Implements System.Collections.Generic.IComparer(Of String).Compare
        Return StrCmpLogicalW(x, y)
    End Function

End Class

这是Exception堆栈跟踪:

  

InnerException:无法比较数组中的两个元素。

     

消息:   DotNetNuke.Services.Exceptions.PageLoadException:无法比较数组中的两个元素。 --- |>   System.InvalidOperationException:无法比较数组中的两个元素。 --- |> System.Security.SecurityException:系统.Collections.Gedition.ArraySortHelper 1.SwapIfGreaterWithItems(T[] keys, IComparer中的Nukeville.Modules.SkinLab.View.nvSorter.Compare(String x,String y)的System.Security.Permissions.SecurityPermission。比较器,Int32 a ,System32C)在System.Collections.Generic.ArraySortHelper 1.QuickSort(T[] keys, Int32 left, Int32 right, IComparer 1比较器处于System.Collections.Generic.ArraySortHelper 1.Sort(T[] keys, Int32 index, Int32 length, IComparer 1比较器),第一个失败的权限的类型是:System.Security。 Permissions.SecurityPermission失败的程序集区域是:MyComputer ---内部异常堆栈跟踪的结束---在System.Aolray.Sort [T]的System.Collections.Generic.GenericArraySortHelper 1.Sort(T[] keys, Int32 index, Int32 length, IComparer 1 comparer) (T []数组,Int32索引,Int32长度,IComparer 1 comparer) at System.Array.Sort[T](T[] array, IComparer 1比较器)Nukeville.Modules.SkinLab.View.GetNVFolder(String ParentName,String [] cf)at Nukeville.Modules.SkinLab.View.GetJavaFolderArrays (String RootPath)位于System.Web.U的System.Web.UI.Control.OnPreRender(EventArgs e)的Nukeville.Modules.SkinLab.View.Page_PreRender(Object s,EventArgs e)在System.Web.UI的System.Web.UI.Control.PreRenderRecursiveInternal()处的System.Web.UI.Control.PreRenderRecursiveInternal()处的System.Web.UI.Control.PreRenderRecursiveInternal()处的System.Web.UI.Control.PreRenderRecursiveInternal()处的I.Control.PreRenderRecursiveInternal()。 System.Web.UI.Control上的System.Web.UI.Control.PreRenderRecursiveInternal()处的System.Web.UI.Control.PreRenderRecursiveInternal()处的System.Web.UI.Control.PreRenderRecursiveInternal()处的Control.PreRenderRecursiveInternal()。 System.Web.UI.Page.ProcessRequestMain(布局includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)的System.Web.UI.Control.PreRenderRecursiveInternal()中的PreRenderRecursiveInternal()---内部异常堆栈跟踪结束---

1 个答案:

答案 0 :(得分:1)

这是一个安全问题。您无法p/invoke ASP.NET环境中的StrCmpLogicalW() partial trust