关于mysql:从App.config F#AppSettings提供程序获取并使用连接字符串

Get and use connection string from App.config F# AppSettings provider

我已经在网上搜寻了好几个小时而无法做到,所以我希望有人可以帮助我。

我尝试直接使用App.Config,但始终返回null。因此,我转向了一个AppSetting typerprovider。这确实返回了预期的字符串,但我有一个问题,到目前为止(通过Google)没有人能找到答案。

1
2
3
4
5
6
7
8
9
10
11
12
open System.Linq
open FSharp.Data.Sql
open MySql.Data
open FSharp.Configuration
type Settings = AppSettings<"App.config">

let c = Settings.ConnectionStrings.RaspberryPi

[<Literal>]
let connection = c //quick attempt to turn c into a literal.

type sql = SqlDataProvider< ConnectionString = c,  ResolutionPath = @"C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.7\Assemblies\v4.5"  >

我收到消息"这不是有效的常量表达式或自定义属性值"。

虽然我可以打印出Appsettings提供程序获得的设置,但似乎无法使用它来连接数据库。

这是App.config:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
    </startup>
  <runtime>
   
      <dependentAssembly>
       
        <bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <connectionStrings>
   
  </connectionStrings>
</configuration>

我已经将typeprovider当作我使用System.Configuration读取文件的较早方法了,即使我闪过输出文件夹并确保所有配置文件都已更新,它也无法正常工作。

请注意,我也在使用MySQL类型提供程序!

尽管我可以直接在代码中使用字符串,但我的理解是,这对于生产代码来说是一个糟糕的主意。

我们将非常感激收到任何帮助-我不介意承认今天这已经烧了好几个小时,令我惊讶的是。

注意-可能对其他人有帮助:我也查看了此答案,本文以及MS论坛中的这篇文章


不幸的是,那行不通。 连接字符串是由读/写静态属性(Settings.ConnectionStrings.RaspberryPi)公开的,不能将其视为常量/文字(通过设计)。

有人可能会编写类型提供程序,通过将连接字符串显示为文字静态字段(而不是读/写属性)来实现所需的功能,但这与更新应用程序设置不兼容,这似乎是目标。 现有提供者。 也许您可以考虑向AppSettings项目提交功能请求,以启用可以按照您想要的方式运行的单独模式。