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>

但是,我现在需要connectionStrings为 EF 连接添加相同的内容,以下条目在web.config下面

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

当我运行应用程序(在 Visual Studio 中)时,我收到以下错误,表明在ConfigurationBuilders查找某些东西时遇到问题......但我不知道......事情是什么,所有的appSettingsconfigurationStrings正在按预期加载。

在此处输入图像描述

如果我删除configBuilders="Secrets",则错误不会显示。

那么我错过了什么,我怎样才能找出它试图加载但找不到的东西。

4

2 回答 2

0

它确实说明了您遇到问题的程序集加载。您是否验证了您的项目实际上正确引用了Microsoft.Configuration.ConfigurationBuilders.UserSecrets?验证版本号,是不是1.0.0.0。通过直接在代码中引用该程序集中的类型最容易验证。如果编译器接受这一点,那么运行时也可能会接受。

如果明显的检查没有帮助,则解决通常的程序集加载故障排除。即fuslogvw.exe/The Assembly Binding Log Viewer

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

文档

于 2020-08-02T07:47:05.097 回答
0

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

当我决定在 Visual Studio 中创建一个新项目并添加配置生成器时,我也遇到了类似的错误。出于某种原因,这些 dll 不可见,但是当我删除配置生成器并尝试Type.GetTypeGlobal.asax其中正确加载程序集时。

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

所以两天后我发现这篇文章https://docs.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 文件夹。并且工作了。

于 2021-05-27T08:02:19.353 回答