在我的MVC应用程序中,我使用外部配置文件来保持干净的web.config.有些文件是常见的,我将它们添加到项目中作为一个位置的链接.对于那些文件,我将复制选项设置为始终复制,并将这些文件复制到目标文件夹,我看到它们.但是当我尝试在浏览器中打开主页时,我看到"无法打开configSource文件"错误.当我删除文件的链接,只是添加它们(没有链接)一切正常.知道什么可能导致这个错误吗?
为简单起见,我通常将大量配置(即app.config和web.config的内容)拆分为单独的.config文件,然后使用'configSource'属性从主配置文件中引用它们.例如:
<appSettings configSource="appSettings.config"/>
Run Code Online (Sandbox Code Playgroud)
然后将所有键/值对放在该appSettings.config文件中,而不是在主配置文件中使用此内联:
<appSettings>
<add key="FirstKey" value="FirstValue"/>
<add key="SecondKey" value="SecondValue"/>
...
</appSettings>
Run Code Online (Sandbox Code Playgroud)
这通常适用于应用程序本身,但在尝试编写单元测试时遇到问题,无论出于何种原因,单元测试需要从存储在其中一个外部文件中的配置部分获取某些值.(我知道大多数这些都可能被认为是"集成测试",因为它们依赖于配置系统,我也有"纯单元测试",但那些不是问题.我真的在寻找测试是否正确检索这些配置值并以正确的方式影响行为).
由于MSTest如何编译并将输出复制到与每次测试运行不同的模糊文件夹(而不是像你想象的那样到'bin'文件夹),它似乎永远无法在测试时找到那些外部文件正在执行.我已经尝试过使用后期构建操作来完成这项工作,但没有运气.有没有办法在运行时将这些外部文件复制到正确的输出文件夹中?
我最近得到了一堆维护的程序,我正在努力寻找一些帮助来采用一些最佳实践.它们本质上是三个独立的软件,它们使用通用DLL来管理应用程序共享的一系列设置.DLL以这种方式工作:它交换用户设置文件(深埋在Windows用户配置文件夹中的XML文件),以及由硬编码(egad!)路径指定的修复文件.
将其保留为用户设置而不是应用程序设置的基本原理是DLL可以在多个位置找到(每个应用程序将使用它一个),因此用户设置文件很常见(如果DLL的所有副本都是相同的编译),而通过使用应用程序设置,将有与DLL的副本一样多的app.config文件.
我试图想出一种更好的方法来集中这些配置并结束无意义的文件交换.一种方法(实际上,最有可能是最好的方法)是重新设计所有3个应用程序,以便它们都使用带有自己的"app.config"的中央dll.还有其他更值得推荐的场地吗?
我有一个Core类lib,里面有我所有的逻辑.
我有一个使用IIS的Web应用程序.
我有一个使用Http Listener的控制台应用程序.
两个主机项目都引用其中包含connectionStringSource.config文件的Core lib.
hosts项目使用Add As Link到Core中的connectionStringSource.config并设置为Copy To Output.在它拥有的IIS主机项目中的web.config中
<connectionStrings configSource="bin\connectionStringSource.config"></connectionStrings>
Run Code Online (Sandbox Code Playgroud)
但是我得到:
[ArgumentException:path中的非法字符.]
[ConfigurationErrorsException:configSource属性无效:路径中的字符非法.(第13行)]
如果我换到
<connectionStrings configSource="bin/connectionStringSource.config"></connectionStrings>
Run Code Online (Sandbox Code Playgroud)
它说
configSource属性必须是相对物理路径,因此不允许使用"/"字符.
有没有办法分享这些设置?