You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过项目引用从ControllerProject1的Web.config获取配置值

当然可以实现!完全不需要绕路读取文件路径,通过项目引用就能搞定,下面给你两种可行的方案,优先推荐第一种:

方案一:将ControllerProject1改为类库项目(最优雅的方式)

Web项目本身不适合被其他Web项目直接引用,所以优先把ControllerProject1调整为类库(Class Library),这样能更规范地实现配置共享:

  • 调整项目类型:如果ControllerProject1目前是Web API项目,右键项目 → 卸载项目 → 编辑.csproj文件,把<Project Sdk="Microsoft.NET.Sdk.Web">替换成<Project Sdk="Microsoft.NET.Sdk">,重新加载项目后,把原Web.config重命名为App.config。
  • 把配置设为嵌入资源:右键App.config → 属性 → 「生成操作」选择嵌入的资源,这样配置文件会被打包进ControllerProject1的程序集里,完全不需要依赖外部文件路径。
  • 封装配置读取逻辑:在ControllerProject1中创建一个公共类,负责读取嵌入的配置:
using System.Configuration;
using System.Reflection;

namespace ControllerProject1
{
    public static class SharedConfig
    {
        public static string GetSettingValue()
        {
            var assembly = Assembly.GetExecutingAssembly();
            // 注意资源名称格式:[项目命名空间].[文件名],如果你的App.config在根目录,就是ControllerProject1.App.config
            using var configStream = assembly.GetManifestResourceStream("ControllerProject1.App.config");
            if (configStream == null)
                throw new InvalidOperationException("无法找到嵌入的配置资源");

            var config = new Configuration();
            config.Load(configStream);
            return config.AppSettings.Settings["SettingName"]?.Value;
        }
    }
}
  • 在ControllerProject2/3中调用:给ControllerProject2/3添加对ControllerProject1的项目引用,然后在方法里直接调用:
var settingValue = ControllerProject1.SharedConfig.GetSettingValue();
方案二:如果ControllerProject1必须保持为Web项目(仅适用于同进程场景)

如果因为业务限制不能修改ControllerProject1的项目类型,且ControllerProject2/3和它运行在同一个Web应用进程中(比如都是主Web项目的类库),可以通过程序集内部可见性实现:

  • 设置内部成员可见性:在ControllerProject1的AssemblyInfo.cs中添加(.NET Core/.NET 5+可直接在.csproj里配置):
// 允许ControllerProject2和ControllerProject3访问内部成员
[assembly: InternalsVisibleTo("ControllerProject2")]
[assembly: InternalsVisibleTo("ControllerProject3")]
  • 封装内部读取方法:在ControllerProject1中创建内部类读取配置:
namespace ControllerProject1
{
    internal static class InternalConfigReader
    {
        public static string GetSettingName()
        {
            return ConfigurationManager.AppSettings["SettingName"];
        }
    }
}
  • 在ControllerProject2/3中调用:添加项目引用后,直接调用内部方法即可:
var settingValue = ControllerProject1.InternalConfigReader.GetSettingName();

注意:这个方案仅适用于ControllerProject1和2/3在同一个进程中运行的场景,如果是独立的Web API项目,这个方法会读取ControllerProject2/3自己的Web.config,而不是ControllerProject1的。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:57:50