我有一个Visual Studio Web服务应用程序,其中包含以下解决方案结构(使用VS2013社区):
- [Solution] S
- [Project] S_Service
- S.amsx
- [Project] S_Lib
- File1.cs
- File2.cs
- app.config
S_Service
项目是一个简单的Web服务项目,只有一个asmx文件和一个WebService方法。该项目包含对S_Lib
项目的引用,该项目是一个类库,用于完成业务逻辑(请求处理)方面的所有工作。
在S_Lib
中我有一个app.config
文件,我在其中存储了S_Lib
中各种组件使用的内容的目录和文件名等内容。在我开发时,代码确定了对该文件的更改。
问题在于:当我发布S_Service
项目时,发布目录不包含app.config
- 仅S_Service.dll
和S_Lib.dll
。在阅读StackOverflow上的其他帖子后(现在似乎无法找到它们),我尝试将app.config
上的构建操作设置为内容并始终复制。太棒了,这会将文件传递到发布目录,所以它看起来不错。但是,一旦我将整个部署到IIS上,对app.config
文件的任何更改都不会在服务运行时反映出来。事实上,我可以从IIS目录中完全删除该文件,它运行得很好。好像S_Lib.dll
包含配置设置的编译版本。这是没用的,因为我想根据它所部署的机器来修改配置。
我需要做什么才能在运行时实际使用app.config
并且即时读取更改?
答案 0 :(得分:1)
正如您所写,S_Lib.dll包含从您在VS设置设计器中设置它们时的编译设置。因此它仍然有效(或多或少)。
您有一个Web服务,因此您需要一个web.config。将一个添加到S_Service项目。然后将app.config内容合并到web.config。每次在S_Lib项目中更改某些设置时,您都必须将更改合并到web.config。
或者您可以通过名称web.config将app.config添加到S_Service项目作为链接(不确定是否可以创建具有不同名称的链接)。然后,当您更改S_Lib项目中的设置时,它们将自动在S_Service项目中引用。
答案 1 :(得分:0)
在找不到基于Visual Studio的简单解决方案来做我想做的事情之后,我实现了一个更加个性化的解决方案。在库项目中,我替换了配置查找方法:
internal static string GetConfig(string key) {
return ConfigurationManager.AppSettings[key] as string;
}
使用一种新方法来读取我自己的设置文件(自定义格式),并存储在解决方案中。它并不完美,因为它意味着解决方案中的每个项目都必须有自己的设置文件,但总体来说更简单。如果有人有兴趣请发表评论我会详细说明这个解决方案。