当我正在抛弃我的小宠物项目时,我正在尝试将所有常量字符串存储在我的app.config文件中(Keys,XpathExpressions等).当我运行编译的exe时,这很有效.在Interactive Shell中并非如此.
我试图将.config文件从我的bin/Release目录复制到obj/Debug&obj/Release目录,但Call to ConfigurationManager.AppSettings.Item("key")
always总是返回null.
有任何建议如何解决这个问题?
最诚挚的问候
F#Interactive 可以处理依赖app.config
文件的可执行文件.
这样做的方法是.fs
在项目中有一个文件,它.config
在COMPILED
define 上加载条件,所以:
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
.
祝你好运......
虽然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.(但请注意,您需要将会话重置为拾取更改.)