2010-02-08 2 views
1

Простите меня, если ответ кажется очевидным.Проблема, связанная с dll F # в проекте C#

Я создал решение Visual Studio и добавил к нему два проекта: одну библиотеку F # (MathLibrary), а вторую - интерфейс C# (называемый frontend, я знаю о своем творчестве).

Так что я добавить ссылку на MathLibrary DLL в моем внешнем интерфейсе проекта, скомпилирован MathLibrary DLL (чтобы убедиться) и попытался использовать его в моем frontend проекте. В этот момент мой компилятор жаловался, что это неопределенная ссылка. Я понимаю, что добавление соответствующей ссылки позволит мне получить доступ к моей DLL, но, очевидно, я пропустил важный шаг.

Любая помощь?

+2

Где вы получили «неопределенную ссылку» и каково фактическое сообщение об ошибке? Это звучит так, будто это может быть недостающее пространство имен или что-то в этом роде ... – itowlson

+0

Когда я пытаюсь ссылаться на класс или метод как DLL.Class, я получаю «имя» MathLibrary 'не существует int it current context – tzenes

ответ

1

Не существует взаимопонимания между именем файла .fs и содержащимися там пространствами имен/модулями, за исключением случаев, когда вы полностью опускаете любые объявления пространства имен или модулей; в этом случае компиляция принимает модуль с тем же именем, что и файл. Хотя я рад, что вы смогли скомпилировать, я не думаю, что вы столкнулись с фактической проблемой/решением.

0

Возможно, это отображается как Module1.SomeClass. Файл по умолчанию в проекте библиотеки F # называется Module1, и если вы не запустите файл исходного кода с объявлением namespace или module, вы создадите код в модуле с тем же именем, что и имя файла.

Вы можете попробовать добавить namespace FsLib в начало своего кода библиотеки F #, который определяет некоторый класс, а затем посмотреть, работает ли в C# FsLib.SomeClass.

+0

Хорошо, я попробовал это и это не сработало.На данный момент я понял, что файл .fs имеет другое имя, которое использует пространство имен, которое я использовал для него. Я не уверен, почему файл требует того же имени, что и пространство имен (поскольку я мог бы иметь несколько файлы в том же пространстве имен), но это и заставило его правильно скомпилировать – tzenes

+0

@tzenes, если вы нашли решение, подумайте над тем, чтобы добавить его в качестве ответа и принять его. – Benjol

+2

@tzones: нет никакой взаимосвязи между .fs имя файла и содержащиеся там пространства имен/модули, за исключением случаев, когда вы полностью опускаете какие-либо пространства имен или объявления модулей, в этом случае компиляция предполагает модуль с тем же именем, что и файл. Хотя я рад, что вы были способен компиляция, я не думаю, что вы столкнулись с реальной проблемой/решением. – pblasucci

0

Успешно ли построена библиотека F #? Вы можете увидеть DLL-файл и содержать какие-либо классы и пространства имен, если вы открываете его с помощью Reflector?

В любом случае вам также необходимо добавить ссылку на FSharp.Core.dll (которая представляет собой библиотеку, содержащую основные типы F #, такие как списки и т. Д., И ссылается на любую DLL, которую производит компилятор F #). Однако, я полагаю, сообщение об ошибке, которое вы получили бы, если бы вам просто нужно было добавить эту ссылку, будет иным.

Смежные вопросы