2013-08-12 20 views
6

Dlaczego nie mogę utworzyć dostawcy typu jako pliku * .exe z [<TypeProviderAssembly()>] i [<EntryPoint>] w środku?F # Typ Dostawca skompilowany jako plik * .exe

Gdy próbuję odwołać takie TP korzystając #r @"d:\TP\bin\Debug\MyTypeProvider.exe", widzę następujące:

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.

muszę mieć czas podtrzymania Typ wnioskowania w oddzielnym procesie, ponieważ powinien być 64bit (w przeciwieństwie 32bit procesu VS). Ale chcę spakować wszystkie rzeczy w jeden plik, odnieść go do VS i zacząć jako proces zewnętrzny.

Odpowiedz

2

Być może jest jakiś dobry powód, dla którego zawsze szukam bibliotek DLL zamiast EXE, ale podejrzewam, że może to być arbitralne ograniczenie.

Mogę załatwić sprawy w FSI, jeśli dostarczę pełną nazwę zespołu do konstruktora TypeProviderAssemblyAttribute (np. [<TypeProviderAssembly("MyExe, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")>]), ale IntelliSense nie działa i nie mogę używać TP z innych projektów. Zastanów się nad zgłoszeniem błędu do zespołu - ale prawdopodobnie pomoże ci to, jeśli będziesz uzasadniał, dlaczego potrzebujesz pliku EXE zamiast biblioteki DLL dla swojego scenariusza.

+0

TP powinna mieć możliwość połączenia się z SharePoint. Jest to możliwe tylko z procesu "64-bitowego". VS to aplikacja "32bit", która oznacza, że ​​IntelliSense też. Nie mogę zrobić tego bezpośrednio od dostawcy typu. Jedynym możliwym rozwiązaniem, które widzę jest rozpoczęcie oddzielnego procesu '64bit' i komunikacja między nimi za pomocą nazwanych potoków WCF. Miło będzie spakować usługę i klienta do jednego exe. –

+0

Możesz spojrzeć na [bieżącą implementację] (https://github.com/sergey-tihon/PowerShellTypeProvider). Ale chcę połączyć te projekty w jeden. Myślę, że w tym przypadku będzie łatwiejszy w użyciu. –