2010-11-12 62 views
0

我创建了一个数组排序器来对DNN模块中的Win Explorer中的数组进行排序。正如在回答一个预览问题:Icomparer实现中的错误。请帮忙 !

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

用户越来越以下错误(下同)时,他们跑的模块,我不是一个特别丰富的ASP.NET开发人员。由于我在我的IComparer中使用了StrCmpLogicalW,并且在不支持StrCmpLogicalW的平台上使用了此错误。或者它是否导致了权限问题。

任何帮助是非常appriciated,

非常感谢。

下面是导致错误的分拣机。

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 

这是异常堆栈跟踪:

的InnerException:无法比较阵列中的两个元素。

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

回答

1

这是一个 安全问题。您不能从partial trust ASP.NET环境中使用p/invokeStrCmpLogicalW()

+0

是否有任何解决方案可以使此比较器在部分信任环境中工作?或者切换到另一个简单的“字母排序”比较器,如果这不能运行? – Norman 2010-11-12 14:24:59

+0

您将不得不在托管代码中实施'StrCmpLogicalW()',这并不容易。幸运的是,[有希望](http://www.interact-sw.co.uk/iangblog/2007/12/13/natural-sorting)。 – 2010-11-12 14:31:37

+0

谢谢你的所有帮助:) ..我在这里开始另一个问题:http://stackoverflow.com/questions/4165662/任何帮助将appriciated。 – Norman 2010-11-12 14:56:21

相关问题