Yani, Proje AB'de FileA.fs ve FileB.fs var. FileB, FileA'dan tanımları kullanır ve hem FileA hem de FileB kullanım tanımlarını Project C'den (C# ile yazılır) kullanır. Ben F # -Etkileşimli tüm dosyayı çalıştırabilir ve bu harika - hangi gerekiyordu nasıl çalışır ...F # etkileşimli - aynı derleme birden fazla dosya başvurduğunda precompiler yönergeleri nasıl kullanılır?
#if COMPILED
namespace ProjectAB
#else
#I "bin\debug"
#r "ProjectZ.dll"
#endif
: FileA.FS yılında
, var.
#if COMPILED
module ProjectAB.ModuleB
#else
#load "FileA.fs"
#I "bin\debug"
#r "ProjectZ.dll"
#endif
Ama (FileB itibaren) bu çalıştırdığınızda, ben hata alıyorum:
FileB.fs, benim başlığıdır fsi.exe referansa göre
FileA.fs(6,1): error FS0222: Files in libraries or multiple-file applications must begin with a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule'. Only the last source file of an application may omit such a declaration.
, #load yönergesi "Bir kaynak dosyayı okur, derler ve çalıştırır". Ancak, COMPILED yönergesi tanımlanmadan yapılması gerektiği gibi görünüyor, çünkü "ProjectAB" ad alanı bildirimini göremiyor.
Başlıklarımı nasıl düzenleyebilirim ki her iki dosyayı da F # -çıkıştırıcıda çalıştırabilir miyim?
Düzenleme Aşağıdaki latkin yanıtına göre, projedeki son dosya olan _TestScript.fsx dosyası olarak bir komut dosyası oluşturdum. Ben diğer dosyalardan tüm precompiler şeyler çıkarılır ve .fsx dosyanın başlık olarak bu ayarlayın:
#if INTERACTIVE
#I "bin\debug"
#r "ProjectZ.dll"
#load "FileA.fs"
#load "FileB.fs"
#endif
Ben interaktif Bu çalıştırmak
, doğru erişimi için beni ProjectZ, fileA ve FileB yükler etkileşimli pencerede.Ancak, _TestScript.fsx dosyasında, başvurulan dosyalardan ("açık" ifadeler de dahil olmak üzere) herhangi bir işlev/tür üzerinde dalgalı kırmızı çizgiler ve hiçbir intellisense alıyorum.
intellisense çalışmasını sağlamak için betik dosyasında kurmam gereken başka bir şey var mı? (Daha önce .fsx dosyalarını kullanmadığım için yanıt oldukça basit olabilir.)
Genellikle tek tek dosyaları yüklemek yerine, yerleşik derlemeyi "fsx" den yapıyorum ve referans yapıyorum. Ama sadece test/keşfetme için komut dosyaları kullanıyorum, bu yüzden kilometreniz değişebilir. – scrwtp