配置生成器 - 无法加载程序集 - .Net Framework

问题描述 投票:0回答:3

我在 .Net Framework WebAPI 中使用基于文件的用户机密,并且所有内容都与

AppSettings
web.config
部分正常工作,如下所示

<configuration>
  <configSections>
    <section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
  </configSections>
  <configBuilders>
    <builders>
      <add name="Secrets" userSecretsFile="MySecretsFile.xml" type="Microsoft.Configuration.ConfigurationBuilders.UserSecretsConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.UserSecrets, Version=1.0.0.0, Culture=neutral" />
    </builders>
  </configBuilders>
  <appSettings  configBuilders="Secrets">
    <add key="mysetting1" value="(default)" />
    <add key="mysetting2" value="(default)" />
  </appSettings>
</configuration>

但是,我现在需要为 EF 连接添加相同的

connectionStrings
,以下条目位于下面的
web.config

<connectionStrings configBuilders="Secrets">
  <add name="Entities" connectionString="A" providerName="System.Data.EntityClient" />
</connectionStrings>

当我运行该应用程序(在 Visual Studio 中)时,我收到以下错误,显示

ConfigurationBuilders
在查找某些内容时遇到问题....但我不知道...问题是什么,所有
appSettings
configurationStrings
正在按预期加载。

如果我删除

configBuilders="Secrets"
,则不会显示错误。

那么我缺少什么,我怎样才能找出它试图加载但找不到的内容。

c# .net web-config asp-net-config-builders
3个回答
1
投票

我花了两天时间尝试解决类似的问题。我尝试在本地安装 Sitecore 10.1,但出现了这样的错误。

当我决定在 Visual Studio 中创建一个新项目并添加配置生成器时,我也遇到了类似的错误。由于某种原因,dll 不可见,但是当我删除配置生成器并尝试使用

Type.GetType
中的
Global.asax
时,它正确加载了程序集。

因此,在解析配置生成器时,它似乎无法正确找到程序集。我尝试过将 dll 粘贴到多个地方。我也将其添加到 GAC,但没有成功。它可能与此评论相关https://github.com/aspnet/MicrosoftConfigurationBuilders/issues/129#issuecomment-628247237 他们正在施展某种魔法来让配置构建器正常工作。

两天后我找到了这篇文章https://learn.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/probing-element并添加了类似的元素

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <probing privatePath="bin"/>
    ...

我确实指向了 bin 文件夹。并且工作了。


0
投票

它确实说明了您在加载哪个程序集时遇到问题。您是否已验证您的项目确实正确引用了

Microsoft.Configuration.ConfigurationBuilders.UserSecrets
?验证版本号,是否为1.0.0.0。最简单的验证方法是直接在代码中引用该程序集中的类型。如果编译器接受这一点,那么运行时也可能会接受。

如果明显的检查没有帮助,则解决通常的程序集加载故障排除。那就是

fuslogvw.exe
/程序集绑定日志查看器

程序集绑定日志查看器显示程序集绑定的详细信息。此信息可帮助您诊断 .NET Framework 在运行时无法找到程序集的原因。这些失败通常是由于程序集部署到错误位置、本机映像不再有效或者版本号或区域性不匹配造成的。公共语言运行时无法定位程序集通常在应用程序中显示为 TypeLoadException。

文档


0
投票

手动添加了 Microsoft.Configuration.ConfigurationBuilders.Base 和 Microsoft.Configuration.ConfigurationBuilders.UserSecrets。右键单击文件/Git/上传忽略的文件或dll

© www.soinside.com 2019 - 2024. All rights reserved.