2012-03-03 16 views
3

こんにちは、自動的に名前空間を開くようにf#コンパイラを作成する方法を知りたいと思います。F#で名前空間を自動的に開く

私は

namespace XXX 

I have to add something here do(AutoOpen("XXX.YYY")) or something like that to make the XXX.YYY module to be opened when referencing the library from external projects. 

[<AutoOpen>] 
module YYY = 
    .... 

おかげ

+0

なぜあなたはそれを行う必要がありますか?オートオープンモジュールはあなたにとって不十分ですか? – pad

+0

いいえ私は外部プロジェクトからライブラリを参照するとすぐにXXX.YYYへのパスが自動的に開き、モジュールXXX.YYYにある関数にアクセスできますスニペットが、私は正確に覚えていない – fabco63

答えて

11

最初の親を開かずに、名前空間/モジュールを開くには、アセンブリレベルで属性を追加する必要があります。あなたは、あなたのプロジェクトにAssemblyInfo.fsファイルを追加することによってこれを行うことができます :

次のコードの場合:

namespace Framework 

module GlobalFunctions = 

    let Test() = 
    10. 

あなたは、例えばAssemblyInfo.fsに次のコードを追加します。

#r @"C:\PathToAssembly\Assembly.dll" 

let result = Test() 
namespace Framework 

[<assembly:AutoOpen("Framework.GlobalFunctions")>] 

do() 

そして、スクリプトからコードを呼び出すことができます(.fsx)を持つファイル210

結果:

--> Referenced 'C:\PathToAssembly\Assembly.dll' 
val result : float = 10.0 
2

AutoOpen属性は、F#のmoduleに適用することができているので、あなたは全体namespaceに追加することはできません。しかし、すべてのF#宣言をモジュール内に置くことができるので、必要なものだけでも十分です。構文は次のとおりです。あなたがアセンブリを参照するときは、すぐに

[<AutoOpen>] 
module MyGlobals = 
    // Declarations in the module 
    type Foo() = 
    member x.Bar = 10 

Foo表示されるはずです。宣言が別の名前空間(つまりMyLibrary)内に配置されている場合は、open MyLibraryを追加する必要がありますが、MyGlobalsには自動的にアクセスできます。

+0

こんにちはトーマス、パッドに私の前のコメントを参照してください。私が欲しいのは、あなたが示唆していることとは少し違っている – fabco63

関連する問題