便携式F#项目可以读取的本地化(配置文件259)

时间:2016-12-26 13:32:46

标签: c# f# visual-studio-2017

我正在使用Visual Studio 2017 RC进行试驾,而且我遇到了绊脚石。

我的项目包含一个ASP.NET Core Web项目和两个可移植的F#库(Profile 259)。 Web项目引用了这些库,我希望将来添加Xamarin Forms项目,这些项目也引用相同的Profile 259库。

enter image description here

我还希望有一个本地化资源文件(可能在自己的共享项目中),我的解决方案中的所有项目都可以读取该文件。在Visual Studio 2015中,我通过创建可移植的C#项目并添加相关的resx文件来实现此目的。

在Visual Studio 2017中,我无法添加可移植的C#类库。当我尝试这样做时,它会提供一个模态对话框,它不接受它为我提供的任何选项:

enter image description here

但是,我可以添加一个Xamarin Forms库:

enter image description here

虽然这引用了我并不感兴趣的Xamarin Forms库,但它至少可以添加,我可以将我的本地化文件LocalisedStrings.resx添加到项目中。

但是,即使我在resx文件中将访问修饰符更改为“公共”,也无法从我的F#库中读取它。代码

module Locales =
    let [<Literal>] private Gender = "Gender"
    let private localisedStringsProperties = typeof<LocalisedStrings>.GetTypeInfo().DeclaredProperties
    let GetStringDictionary(predicate) = localisedStringsProperties |> Seq.filter predicate |> Seq.map (fun p -> (p.Name, p.GetMethod.Invoke(null, [||]).ToString())) |> dict
    let GetGenders() = GetStringDictionary(fun p -> p.Name.StartsWith(Gender) && p.Name.Length > Gender.Length)
    let GetValues(keys) = 
        let values = GetStringDictionary(fun p -> keys |> Array.exists(fun key -> key = p.Name))
        let evaluate key =
            match values.ContainsKey key with
            | true -> values.[key]
            | false -> key
        keys |> Array.map evaluate
    let GetValue(key) = GetValues([|key|]).[0]

无法识别命名空间或类LocalisedStrings

问题

  1. 还有另一种从便携式F#库进行本地化的方法吗?我无法直接添加resx文件,这就是我在2015项目中使用便携式C#库的原因。但是,如果有更多的F#方式,我愿意使用它。
  2. 我是否无法在可移植的C#项目中添加Release Candidate错误,或者该项目类型已被弃用?
  3. 为什么我的F#库没有选择LocalisedStrings类和命名空间,即使已成功添加项目引用,并且resx访问修饰符已更改为public?
  4. 更新:问题2已得到解答。这是一个PEBKAC问题:我只需要检查多个复选框。在这种情况下,我需要检查配置文件259(.NET Framework 4,5,ASP.NET Core 1.0,Windows 8,Windows Phone 8.1,Windows Phone Silverlight 8)中包含的所有选项。但是,问题1和问题3仍然存在。

0 个答案:

没有答案