【问题标题】:Error on an Icomparer Implementation. Please help !Icomparer 实现上的错误。请帮忙 !
【发布时间】:2011-05-09 02:14:30
【问题描述】:

我创建了一个数组排序器来对 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

这是异常堆栈跟踪:

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

消息: DotNetNuke.Services.Exceptions.PageLoadException:无法比较数组中的两个元素。 ---|> System.InvalidOperationException:无法比较数组中的两个元素。 ---|> System.Security.SecurityException: System.Security.Permissions.SecurityPermission at Nukeville.Modules.SkinLab.View.nvSorter.Compare(String x, String y) at System.Collections.Generic.ArraySortHelper1.SwapIfGreaterWithItems(T[] keys, IComparer1 比较器, Int32 a, Int32 b) 在 System.Collections.Generic.ArraySortHelper1.QuickSort(T[] keys, Int32 left, Int32 right, IComparer1 比较器) 在 System.Collections.Generic.GenericArraySortHelper1.Sort(T[] keys, Int32 index, Int32 length, IComparer1 比较器) 失败的第一个权限的类型是:System.Security.Permissions .SecurityPermission 失败的程序集区域是:MyComputer --- End of internal exception stack trace --- at System.Collections.Generic.GenericArraySortHelper1.Sort(T[] keys, Int32 index, Int32 length, IComparer1 comparer) at System.Array.Sort[T](T[ ] array, Int32 index, Int32 length, IComparer1 comparer) at System.Array.Sort[T](T[] array, IComparer1 comparer) at Nukeville.Modules.SkinLab.View.GetNVFolder(String ParentName, String[] cf) at Nukeville.Modules.SkinLab.View.GetJavaFolderArrays(String RootPath) at System.Web.UI.Control.OnPr 上的 Nukeville.Modules.SkinLab.View.Page_PreRender(Object s, EventArgs e) eRender(EventArgs e) 在 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.Control.PreRenderRecursiveInternal() 在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) --- 内部异常堆栈结束追踪---

【问题讨论】:

    标签: asp.net vb.net sorting icomparer


    【解决方案1】:

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

    【讨论】:

    • 是否有任何解决方案可以使此比较器也可以在部分信任环境中工作?如果无法运行,或者切换到另一个简单的“字母排序”比较器?
    • 您必须在托管代码中实现StrCmpLogicalW(),这并不容易。幸运的是,there's hope
    • 感谢您的所有帮助 :) .. 我在这里提出了另一个问题:stackoverflow.com/questions/4165662 任何帮助都会得到帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多