Можно ли вызывать Windows.Forms как скрипт F#? Насколько мне известно, возникает проблема при попытке передать им пакет .nuget, как описано здесь , с возможным решением (ссылка на файлы непосредственно на целевой машине), описанным здесь. Я не пытался проверить, работает ли предлагаемое решение с .net core 3.1 (которое использовал автор поста). Однако я не мог запустить решение под .net 5 после обращения к файлам непосредственно на диске с ошибкой, похожей на «Не удалось загрузить файл или сборку System.Drawing.Common, версия = 5.0.0.0, культура = нейтральная, PublicKeyToken = cc7b13ffcd2ddd51». Не удалось найти или загрузить определенный файл. (0x80131621)».
Вот код:
#r "DotnetLocation/dotnet/shared/Microsoft.WindowsDesktop.App/5.0.1/System.Windows.Forms"
#r "DotnetLocation/dotnet/shared/Microsoft.WindowsDesktop.App/5.0.1/System.Drawing"
#r "DotnetLocation/dotnet/shared/Microsoft.WindowsDesktop.App/5.0.1/System.Drawing.Common"
#r "D:/F# Examples/Chapter7Libs/Vector/bin/Debug/netcoreapp5.0/Chapter7libs"
open System.Drawing
open System.Windows.Forms
Application.EnableVisualStyles()let winSize = Size(450, 300)
let display (title: string, (c: Curve.Curve, pw: int, ph: int)) =
let f(x,y) = Point(int(round x), ph - int(round y))
let clst = Curve.toList c
let ptLst = List.map f clst
let pArr = Array.ofList ptLst let pen = new Pen(Color.Black)
let draw(g: Graphics) = g.DrawLines(pen, pArr) let panel = new Panel(Dock=DockStyle.Fill)
panel.Paint.Add(fun e -> draw(e.Graphics)) let win = new Form(Text=title, Size=winSize, AutoScroll=true, AutoScrollMinSize=Size(pw,ph))
win.Controls.Add(panel)
win.Show()
(Пример из «Функционального программирования с использованием F#», глава 7). Попытка обернуть вызовы Forms в dll и вызвать их из скрипта тоже не сработала - скрипт просто не смог загрузить модуль, который обернул вызовы (другие модули из той же dll работали нормально).
PS: При попытке скомпилировать код проблем нет, работает нормально, у меня проблема только с интерактивными скриптами.
Хорошо спасибо большое. Это должен быть принятый ответ.
Есть ли шанс, что он будет поддерживаться как скрипт в будущем?
@PhillipCarter Означает ли это, что проекты, использующие WPF или Forms для серверной части (я думаю, что Eto Forms делает это в Windows), также затронуты, а именно вы не можете использовать их из скрипта?
Скорее всего, да. Вам придется использовать проект.
Ссылаясь на комментарий Филиппа Картера к вопросу в качестве принятого ответа на данный момент.
Нет, на данный момент это не поддерживаемый сценарий. Winforms больше не просто библиотека, это особый вид закрытия зависимостей, который в настоящее время понимается msbuild только при сборке. Вот почему это работает в проекте, но не в сценарии
Нет, на данный момент это не поддерживаемый сценарий. Winforms больше не просто библиотека, это особый вид закрытия зависимостей, который в настоящее время понимается msbuild только при сборке. Вот почему это работает в проекте, но не в сценарии.