我正在使用Visual Studio 2017 RC进行试驾,而且我遇到了绊脚石。
我的项目包含一个ASP.NET Core Web项目和两个可移植的F#库(Profile 259)。 Web项目引用了这些库,我希望将来添加Xamarin Forms项目,这些项目也引用相同的Profile 259库。
我还希望有一个本地化资源文件(可能在自己的共享项目中),我的解决方案中的所有项目都可以读取该文件。在Visual Studio 2015中,我通过创建可移植的C#项目并添加相关的resx
文件来实现此目的。
在Visual Studio 2017中,我无法添加可移植的C#类库。当我尝试这样做时,它会提供一个模态对话框,它不接受它为我提供的任何选项:
但是,我可以添加一个Xamarin Forms库:
虽然这引用了我并不感兴趣的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
。
问题
resx
文件,这就是我在2015项目中使用便携式C#库的原因。但是,如果有更多的F#方式,我愿意使用它。LocalisedStrings
类和命名空间,即使已成功添加项目引用,并且resx
访问修饰符已更改为public?更新:问题2已得到解答。这是一个PEBKAC问题:我只需要检查多个复选框。在这种情况下,我需要检查配置文件259(.NET Framework 4,5,ASP.NET Core 1.0,Windows 8,Windows Phone 8.1,Windows Phone Silverlight 8)中包含的所有选项。但是,问题1和问题3仍然存在。