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

3

我正在使用基于文件的用户机密功能在我的.Net Framework WebAPI中,并且使用以下web.configAppSettings部分一切正常。

<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正在遇到找不到某些内容的问题....但我不知道是什么...所有appSettingsconfigurationStrings都按预期加载。

enter image description here

如果我移除configBuilders="Secrets",那么错误就不会显示出来。
那么我错过了什么,如何找出它试图加载但无法找到的内容。
2个回答

1

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

当我决定在Visual Studio中创建一个新项目并添加配置构建器时,我也遇到了类似的错误。由于某种原因,dll文件不可见,但是当我删除配置构建器并在Global.asax中使用Type.GetType时,它可以正确加载程序集。

因此,当解析配置构建器时,它似乎无法正确找到程序集。我尝试将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 在运行时无法找到程序集。这些失败通常是由于将程序集部署到错误位置、原生图像不再有效或版本号或文化不匹配所导致的。CLR 未能找到程序集通常会在应用程序中显示为 TypeLoadException。

(documentation)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接