当前位置:  开发笔记 > 开发工具 > 正文

App.config和F#Interactive无法正常工作

如何解决《App.config和F#Interactive无法正常工作》经验,为你挑选了2个好方法。

当我正在抛弃我的小宠物项目时,我正在尝试将所有常量字符串存储在我的app.config文件中(Keys,XpathExpressions等).当我运行编译的exe时,这很有效.在Interactive Shell中并非如此.

我试图将.config文件从我的bin/Release目录复制到obj/Debug&obj/Release目录,但Call to ConfigurationManager.AppSettings.Item("key")always总是返回null.

有任何建议如何解决这个问题?

最诚挚的问候



1> Daniel Asher..:

F#Interactive 可以处理依赖app.config文件的可执行文件.

这样做的方法是.fs在项目中有一个文件,它.configCOMPILEDdefine 上加载条件,所以:

let GetMyConfig() =
  let config  = 
    #if COMPILED 
      ConfigurationManager.GetSection("MyConfig") :?> MyConfig
    #else                        
      let path = __SOURCE_DIRECTORY__ + "/app.config"
      let fileMap = ConfigurationFileMap(path) 
      let config = ConfigurationManager.OpenMappedMachineConfiguration(fileMap) 
      config.GetSection("MyConfig") :?> MyConfig
    #endif

然后在脚本文件中引用的可执行文件,并#load.fs文件中,以便:

#I "../Build/Path

#r "ConfiguredApp.exe"

#load "MyConfig.fs"

在执行这三行时,您将在FSI窗口中看到类似于以下内容的消息:

[Loading C:\Svn\trunk\Source\ConfiguredApp\MyConfig.fs]

Binding session to 'C:\Svn\Qar\trunk\Build\Path\ConfiguredApp.exe'...

请注意,您实际上是app.config在FSI中引用了when(而不是生成的).exe.config.

祝你好运......



2> MichaelGG..:

虽然FSI动态生成输入代码,但使用fsi.exe.config可以正常工作.

我创建了这个文件:


    
        
    

并将其保存为"fsi.exe.config"(程序文件\ fsharp-version\bin).

然后开始FSI:

> #r "System.configuration";;
--> Referenced 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.configuration.dll'

> System.Configuration.ConfigurationManager.AppSettings.["test"];;
val it : string = "bar"

它也适用于Visual Studio.(但请注意,您需要将会话重置为拾取更改.)

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有