用于发布Web服务的配置文件

时间:2015-03-04 12:02:47

标签: c# .net web-services iis

我有一个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.dllS_Lib.dll 。在阅读StackOverflow上的其他帖子后(现在似乎无法找到它们),我尝试将app.config上的构建操作设置为内容并始终复制。太棒了,这会将文件传递到发布目录,所以它看起来不错。但是,一旦我将整个部署到IIS上,对app.config文件的任何更改都不会在服务运行时反映出来。事实上,我可以从IIS目录中完全删除该文件,它运行得很好。好像S_Lib.dll包含配置设置的编译版本。这是没用的,因为我想根据它所部署的机器来修改配置。

我需要做什么才能在运行时实际使用app.config并且即时读取更改?

2 个答案:

答案 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;
}

使用一种新方法来读取我自己的设置文件(自定义格式),并存储在解决方案中。它并不完美,因为它意味着解决方案中的每个项目都必须有自己的设置文件,但总体来说更简单。如果有人有兴趣请发表评论我会详细说明这个解决方案。