Ошибка реализации Icomparer. Пожалуйста помоги !

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

Сортировка массива имен папок, таких как проводник Windows (в числовом и алфавитном порядке) - 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.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 была: --- Конец внутренней трассировки стека исключений --- в компараторе System.Collections.Generic.GenericArraySortHelper1.Sort(T[] keys, Int32 index, Int32 length, IComparer1) в компараторе System.Array.Sort [T] (массив T [], индекс Int32, длина Int32, компаратор IComparer1 comparer) at System.Array.Sort[T](T[] array, IComparer1) в Nukeville.Modules .SkinLab.View.GetNVFolder (String ParentName, String [] cf) в Nukeville.Modules.SkinLab.View.GetJavaFolderArrays (String RootPath) в Nukeville.Modules.SkinLab.View.Page_PreRender (Object s, EventArgs e) в System.Web .UI.Control.OnPreRender (EventArgs e) в System.Web.UI.Co ntrol.PreRenderRecursiveInternal () в System.Web.UI.Control.PreRenderRecursiveInternal () в System.Web.UI.Control.PreRenderRecursiveInternal () в System.Web.UI.Control.PreRenderRecursiveInternal () в System.Web.UI PreRenderRecursiveInternal () в System.Web.UI.Control.PreRenderRecursiveInternal () в System.Web.UI.Control.PreRenderRecursiveInternal () в System.Web.UI.Control.PreRenderRecursiveInternal () в System.Web.UI.RecursiveInternal () в System.Web.UI.RecursiveInternal () ) в System.Web.UI.Control.PreRenderRecursiveInternal () в System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) --- Конец трассировки стека внутренних исключений ---


person Norman    schedule 12.11.2010    source источник


Ответы (1)


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

person Frédéric Hamidi    schedule 12.11.2010
comment
Есть ли какие-либо решения, позволяющие заставить этот компаратор работать и в среде частичного доверия? Или переключиться на другой простой компаратор с «алфавитной сортировкой», если он не может работать? - person Norman; 12.11.2010
comment
Вам придется реализовать StrCmpLogicalW() в управляемом коде, что будет непросто. К счастью, есть надежда. - person Frédéric Hamidi; 12.11.2010
comment
Спасибо за вашу помощь :) .. Я начал другой вопрос здесь: stackoverflow.com/questions/4165662 любая помощь будет оценен. - person Norman; 12.11.2010