2013-08-12 12 views
6

Warum kann ich Type Provider nicht als * .exe Datei mit [<TypeProviderAssembly()>] und [<EntryPoint>] innerhalb erstellen?F # Type Provider kompiliert als * .exe Datei

Wenn ich versuche, so zu referenzieren #r @"d:\TP\bin\Debug\MyTypeProvider.exe" TP verwenden, sehe ich folgende:

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.

Ich brauche eine Typinferenz Laufzeit in einem separaten Prozess haben, denn es 64bit sein soll (im Gegensatz zu 32bit VS Prozess). Aber ich möchte alle Dinge in eine Datei packen, von VS referenzieren und als externen Prozess starten.

Antwort

2

Vielleicht gibt es einen guten Grund zugrunde, immer nach DLLs statt EXEs zu suchen, aber ich vermute, dass dies eine willkürliche Einschränkung sein kann.

Ich kann Sachen in FSI arbeiten, wenn ich den vollen Namen der Versammlung dem TypeProviderAssemblyAttribute Konstruktor gebe (z. B. [<TypeProviderAssembly("MyExe, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")>]), aber IntelliSense funktioniert nicht und ich kann den TP von anderen Projekten nicht verwenden. Überlegen Sie, ob Sie einen Fehler mit dem Team einreichen sollten - aber es würde wahrscheinlich helfen, wenn Sie begründen könnten, warum Sie für Ihr Szenario eine EXE anstelle einer DLL benötigen.

+0

TP sollte eine Verbindung zu SharePoint herstellen können. Es ist nur von '64bit' möglich. VS ist '32bit' App, die auch IntelliSense bedeutet. Ich kann es nicht direkt vom Typ Provider machen. Die einzige mögliche Lösung, die ich sehe, ist, separaten 64-Bit-Prozess zu starten und zwischen ihnen zu kommunizieren, indem WCF-Named Pipes verwendet werden. Es wird nett sein, Service und Client in eine exe zu packen. –

+0

Sie können die [aktuelle Implementierung] (https://github.com/sergey-tihon/PowerShellTypeProvider) einsehen. Aber ich möchte diese Projekte zu einem zusammenführen. Ich denke, dass es in diesem Fall einfacher zu benutzen ist. –