2013-08-12 4 views
6

タイププロバイダを[<TypeProviderAssembly()>][<EntryPoint>]の* .exeファイルとして作成できないのはなぜですか?F#タイププロバイダを* .exeファイルとしてコンパイル

私は、このような#r @"d:\TP\bin\Debug\MyTypeProvider.exe"を使用してTPと参照しようとすると、私は以下を参照してください。

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.

それは64bit32bitとは異なり、VSプロセスでなければなりませんので、私は、別のプロセスで型推論ランタイムを持っている必要があります)。しかし、私はすべてのものを1つのファイルにまとめ、VSから参照して外部プロセスとして開始したいと考えています。

答えて

2

おそらく、EXEの代わりにDLLを常に探すための根本的な理由がいくつかありますが、これは任意の制限である可能性があります。

TypeProviderAssemblyAttributeコンストラクタ(例:[<TypeProviderAssembly("MyExe, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")>])にアセンブリのフルネームを指定するとFSIで作業することができますが、IntelliSenseが機能せず、他のプロジェクトのTPを使用できません。チームにバグを提出することを検討してください。しかし、あなたのシナリオにDLLの代わりにEXEが必要な理由を正当化できるなら、おそらく役に立ちます。

+0

TPがSharePointに接続できる必要があります。これは '64bit'プロセスからのみ可能です。 VSは32ビットのアプリでIntelliSenseも意味します。私はタイププロバイダから直接行うことはできません。私が見る唯一の可能な解決策は、別々の '64bit'プロセスを開始し、WCF名前付きパイプを使ってそれらの間で通信することです。 1つのexeにサービスとクライアントをパックするのは良いことです。 –

+0

[現在の実装](https://github.com/sergey-tihon/PowerShellTypeProvider)を見ることができます。しかし、私はこれらのプロジェクトを1つに統合したい。私はこの場合、使いやすくなると思います。 –

関連する問題