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

Config file for publishing web service

我有一个 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 项目的引用,一个 class 库来完成业务逻辑(请求处理)方面的所有工作。

S_Lib 中,我有一个 app.config 文件,我在其中存储诸如 S_Lib 中各种组件使用的目录和文件名之类的东西。当我在开发时,代码 ok 会获取对该文件的更改。

问题是:当我发布 S_Service 项目时,发布目录不包含我的 app.config - 只有 S_Service.dllS_Lib.dll。在阅读了 Whosebug 上的一些其他帖子后(现在似乎找不到),我尝试将 app.config 上的构建操作设置为 Content 和 Copy Always。太好了,这会将文件传送到发布目录,所以看起来没问题。但是,一旦我将全部部署到 IIS 上,当服务为 运行 时,对 app.config 文件的任何更改都不会反映出来。事实上,我可以从 IIS 目录中完全删除该文件,运行 就可以了。就好像 S_Lib.dll 包含配置设置的编译版本。这没有用,因为我想根据部署的机器修改配置。

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

正如您所写,S_Lib.dll 包含您在 VS 设置设计器中设置它们时的编译设置。因此它仍在工作(或多或少)。

您有网络服务,因此需要 web.config。将一个添加到 S_Service 项目。然后将app.config内容合并到web.config。每次更改 S_Lib 项目中的某些设置时,您也必须将更改合并到 web.config。

或者您可以将 app.config 添加到 S_Service 项目 作为 link 按名称 web.config (不确定是否可以创建一个具有不同名称的 link)。然后,当您更改 S_Lib 项目中的设置时,它们将在 S_Service 项目中自动引用。

在找不到一个简单的基于 Visual Studio 的解决方案来完成我想做的事情之后,我实施了一个更加定制化的解决方案。在库项目中,我替换了配置查找方法:

internal static string GetConfig(string key) {
    return ConfigurationManager.AppSettings[key] as string;
}

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