Ошибка в реализации Icomparer.Пожалуйста помоги ! - PullRequest
0 голосов
/ 12 ноября 2010

Я создал сортировщик массива для сортировки массивов, как в Win Explorer в модуле DNN. Как и в ответе на вопрос предварительного просмотра:

Сортировка массива имен папок, таких как Windows Explorer (в цифровом и алфавитном порядке) - VB.NET

Пользователь получает следующую ошибку (ниже), когда запускает модуль, я не особо опытный разработчик ASP.NET. Вызвана ли эта ошибка, потому что я использовал StrCmpLogicalW в своем IComparer и используется на платформе, которая не поддерживает 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 в 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 Comparer) в 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 в) Nukeville.Modules.SkinLab.View.Page_PreRender (Objects, EventArgs e) в System.Web.UI.Control.OnPreRender (EventArgs e) в S ystem.Web.UI.Control.PreRenderRecursiveInternal () в System.Web.UI.Control.PreRenderRecursiveInternal () в System.Web.UI.Control.PreRenderRecursiveInternal () в System.Web.UI.Control.PreRenderRecursive .Internal () Web.UI.Control.PreRenderRecursiveInternal () в System.Web.UI.Control.PreRenderRecursiveInternal () в System.Web.UI.Control.PreRenderRecursiveInternal () в System.Web.UI.Control.PreRenderRecursiveInternal () в System.W. UI.Control.PreRenderRecursiveInternal () в System.Web.UI.Control.PreRenderRecursiveInternal () в System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) --- конец трассировки внутреннего исключения *

1 Ответ

1 голос
/ 12 ноября 2010

Это проблема безопасности.Вы не можете p / invoke StrCmpLogicalW () из частичного доверия ASP.NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...