Поставщик типов F#, скомпилированный в виде файла *.exe

Почему я не могу создать Type Provider как файл *.exe с [<TypeProviderAssembly()>] и [<EntryPoint>] внутри?

Когда я пытаюсь сослаться на такой TP, используя #r @"d:\TP\bin\Debug\MyTypeProvider.exe", я вижу следующее:

test.fsx(3,1): error FS3031: The type provider 'd:\TP\bin\Debug\MyTypeProvider.exe' reported an error: Assembly attribute 'TypeProviderAssemblyAttribute' refers to a designer assembly 'MyTypeProvider' which cannot be loaded or doesn't exist. Could not load file or assembly 'file:///d:\TP\bin\Debug\MyTypeProvider.dll' or one of its dependencies. The system cannot find the file specified.

Мне нужно иметь среду выполнения вывода типа в отдельном процессе, потому что она должна быть 64bit (в отличие от 32bit процесса VS). Но я хочу упаковать все в один файл, сослаться на него из VS и запустить как внешний процесс.


person Sergey Tihon    schedule 12.08.2013    source источник


Ответы (1)


Возможно, есть какая-то веская причина всегда искать DLL вместо EXE, но я подозреваю, что это может быть произвольное ограничение.

Я могу заставить вещи работать в FSI, если я укажу полное имя сборки конструктору TypeProviderAssemblyAttribute (например, [<TypeProviderAssembly("MyExe, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")>]), но IntelliSense не работает, и я не могу использовать TP из других проектов. Рассмотрите возможность регистрации ошибки с командой — но, вероятно, было бы полезно, если бы вы могли обосновать, почему вам нужен EXE вместо DLL для вашего сценария.

person kvb    schedule 12.08.2013
comment
TP должен иметь возможность подключаться к SharePoint. Это возможно только из 64bit процесса. VS — это 32bit приложение, которое также означает IntelliSense. Я не могу сделать это напрямую из поставщика типов. Единственное возможное решение, которое я вижу, - это запустить отдельный процесс 64bit и обмениваться данными между ними с помощью именованных каналов WCF. Было бы неплохо упаковать сервис и клиент в один exe. - person Sergey Tihon; 12.08.2013
comment
Вы можете ознакомиться с текущей реализацией. Но я хочу объединить эти проекты в один. Думаю, что в этом случае им будет проще пользоваться. - person Sergey Tihon; 12.08.2013