我们有一个遗留的 .NET 解决方案,它结合了 MVC 和 WebForms 的东西,以及一些 Web API 项目作为网站根目录下的应用程序。显然,这些 Web API 应用程序将继承网站的 web.config 设置。
我们还有另一个项目——限界上下文——用于 SSO 身份验证,它位于同一根文件夹内,因此也继承了网站的 web.config 设置。此限界上下文应用程序是使用 .NET Core 构建的。
- wwwroot // .NET Framework
- API 1 // .NET Framework
- API 2 // .NET Framework
- ...
- SSO / authentication // bounded context, built in .NET Core
我们最近开始使用 Azure Key Vault 来存储我们的机密,并且要在本地使用这些机密,我们正在使用 secrets.xml 文件。所以根网站的web.config看起来是这样的……
<configSections>
<section name="configBuilders" ... />
</configSections>
<configBuilders>
<builders>
<add name="Secrets" optional="false" userSecretsFile="~\secrets.xml" [elided attributes] />
</builders>
</configBuilders>
<appSettings configBuilders="Secrets">
<add key="a_key" value="value specified in secrets.xml" />
...
</appSettings>
这是问题所在:身份验证有界上下文项目抛出异常,因为它找不到Microsoft.Configuration.ConfigurationBuilders.UserSecrets
程序集 - 因为它继承了网站的配置,它需要知道该配置部分的全部内容。
但是,如果在 .NET Core身份验证项目中引用该 NuGet 包,我会收到消息...
此软件包可能与您的项目不完全兼容。
...它会自动回滚。
因此,如果我无法UserSecrets
在 .NET Core 子应用程序中引用程序集,那么如何让它识别<configBuilders>
继承的配置文件中的部分?
我也试过删除元素......
<configSections>
<section name="configBuilders" />
</configSections>
...来自根配置文件,但子应用程序随后会看到该<configBuilders>
元素并且无法识别它。
所以问题归结为:
- 子应用程序需要在其中
<configBuilders>
定义元素的 NuGet 包。
如果不... - 子应用程序看到
<configSections>
/<section name="configBuilders" />
元素并且需要知道它是在哪里定义的。或者,我在子应用程序中
删除该元素,然后...<section name="configBuilders" />
- 子应用程序看到
<configBuilders>
元素并且需要知道哪个配置部分定义了它。