Никакой источник, доступный при отладке приложения C#, который ссылки lib F#

В моем решении VS2010, приложение C# ссылки проекта проект библиотеки F#.

Когда a NullReferenceException брошен от lib F#, отладчик не может найти исключение точки брошенным. Это просто не говорит 'Доступного Источника'.

Я должен изменить некоторые опции, или это - ограничение VS2010?

Я добавил некоторый пример кода:

Проект 'Library1' F#

module Module1

type AA() =
    let _a = "xx"
    member x.a = _a

let aa:AA option = None

let b() =
    aa.Value.a  // null reference occurs here

Проект 'ConsoleApp1' C#

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.Out.Write(Module1.b());
            Console.In.Read();
        }
    }
}
1
задан CCovey 9 April 2015 в 20:57
поделиться

2 ответа

Ошибка не вызвана какими-либо проблемами взаимодействия C # / F #. Когда вы вызываете b () , он пытается получить доступ к значению параметра Value of a None, что вызывает исключение нулевой ссылки во время выполнения.

В библиотеке F # попробуйте заменить let aa: AA option = None на let aa: AA option = Some (AA ()) . Затем код C # должен напечатать «xx».

При раскрытии типа параметра F # внешнему миру вы можете разрешить возвращаемое значение null из пустого параметра вместо исключения. Например:

module Module1

//attribute needed in order to be able to return null from the match statement
[<AllowNullLiteralAttribute>] 
type AA() =
    let _a = "xx"
    member x.a = _a

let aa:AA option = None

let b() = match aa with
          | None -> null
          | Some value -> value 

И проверьте наличие null в любом коде, который использует эту библиотеку F #.

Обратите внимание на атрибут AllowNullLiteral . Попробуйте закомментировать этот атрибут, и вы увидите, что F # не распознает значение null в первой ветви соответствия.

0
ответ дан 2 September 2019 в 22:57
поделиться

В принципе, это должно работать без установки каких-либо дополнительных параметров. Несколько вещей, которые следует проверить:

  • Может ли среда выполнения найти файл PDB для вашей библиотеки F #?

    Она должна это сделать, если файл PDB находится в том же каталоге, что и DLL. Вы также можете посмотреть окно «Вывод» и выбрать «Отладка» из комбо, чтобы увидеть информацию, распечатываемую при запуске приложения - там вы можете увидеть, были ли загружены символы или нет. Если у вас есть символы PDB в каком-то специальном каталоге, вы можете указать каталог в Инструменты -> Параметры -> Отладка -> Символы.

  • Что происходит, когда вы пытаетесь установить точку останова в исходном коде F #?

    Говорится ли что-то вроде «символы не загружены» (и отображается точка останова серым цветом)? Показывает ли он какую-либо дополнительную информацию, которая может быть использована для поиска причины проблемы?

2
ответ дан 2 September 2019 в 22:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: