【问题标题】:Is it possible to use F# to develop Windows 8 Universal App是否可以使用 F# 开发 Windows 8 Universal App
【发布时间】:2015-02-27 09:34:22
【问题描述】:

我想使用 F# 开发 windows 8.1 通用应用程序。所以我创建了 F# 可移植库。但不幸的是,我无法在其上打开 Windows.Storage 命名空间。

然后我创建了 C# Windows 应用程序类库,并在其中实现了我需要的功能:

 public static async Task<string> ReadFileToString(string filename)
 {
        StorageFile file = await StorageFile.GetFileFromPathAsync(filename);
        string fileContent =  "";
        fileContent = await FileIO.ReadTextAsync(file);

        return fileContent;
 }

然后我想在我的 F# 可移植库中添加对这个 C# 库的引用,但收到错误消息,即

"这是不可能的,因为该项目是为平台设计的 (.NETCore) 不同于当前的 (.NETPortable)"

可以用F#开发windows 8通用应用吗?

【问题讨论】:

  • 如果您将 C# 项目设为可移植库,那么它应该可以工作。与F#没有任何关系。可移植库不能引用针对特定平台的库。
  • 是的,但我不能在这个库中使用 Windows.Storage 命名空间(和 StorageFile)。所以我希望在用 F# 编写的通用应用程序中读取文件的可能性
  • 检查您用于创建 F# 库的配置文件。有不同类型的可移植库。
  • 如果我理解正确的话,我只有一个选项'.Net Portable Subset (Net Framework 4.5, Windows 8)'。但看起来这是可能的。例如,我发现了这段代码 (stackoverflow.com/questions/23312965/…),其中 Andy B 在 F# 中使用 StorageFile
  • 我检查了两个配置文件(7 和 47)。他们都无法打开 Windows.StorageFile

标签: f# windows-8.1


【解决方案1】:

这是我找到的解决方案。

  • 使用 NuGet 将 PCLStorage 安装到 F# 便携式库和 Windows 8.1 应用商店应用 (!)
  • 在 F# 库中设置“复制到本地”= False (!)

这是 f# 库的代码:

namespace PortableLibrary1

open PCLStorage

type MyClass() =
    member this.Do (filename : string) (text : string) = 
        let folder = FileSystem.Current.LocalStorage       
        async {
            let! result = Async.AwaitTask(folder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting))
            result.WriteAllTextAsync(text) |> ignore        
        } |> Async.RunSynchronously

这是一个 C# Store App 代码:

 private void Button_Click(object sender, RoutedEventArgs e)
 {
    MyClass cls = new MyClass();             
    cls.Do("uuu.ii", "message of me");
 }

【讨论】:

  • 这适用于 Windows 10 吗?
猜你喜欢
  • 2017-02-18
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多