2

我创建了一个 HttpModule,将其添加到 GAC,然后在我的 web.config 中注册它。我使用Fody Costura嵌入依赖项。我的 bin 文件夹中的输出仅包含一个 dll、一个 .config 和一个 .pdb(因为所有依赖项都合并到该文件中。)我的问题是,每当我从 GAC 加载模块时,它都无法找到嵌入依赖项。我有以下观察:

  • 每当我的模块从 /bin 文件夹加载时,一切正常。我注册模块如下:

<modules>
  <add name="MyModule" type="MyNamespace.MyModule.Module, MyNamespace.MyModule"/>
</modules>

  • 当我从 GAC 加载我的模块时,我的模块无法加载依赖项。我收到以下消息:

    无法加载文件或程序集“Newtonsoft.Json,Version=10.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed”或其依赖项之一。该系统找不到指定的文件。

我的模块加载如下:

<modules>
  <add name="MyModule" type="MyNamespace.MyModule.Module, MyNamespace.MyModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7d22d90bda7ffgab, processorArchitecture=MSIL"/>
</modules>

我在想我的模块不知道依赖关系在它自己内部。有什么方法可以告诉我的模块从合并的 dll 加载依赖项?或者任何可以指出我正确方向的人?我有点迷失在这里。谢谢!

4

1 回答 1

2

问题似乎与Newtonsoft.Json它本身有关。

Newtonsoft.Json这些问题说明不同版本的强名称相同存在问题:

因此,如果 GAC 中已经安装了一个版本,而您尝试安装另一个版本,它将不会被安装。

具有相同强名称的程序集应该相同。

强命名程序集 | MSDN

结果,您的应用程序在 GAC 中找不到所需的版本,Newtonsoft.Json因为它不存在。

如果您可以尝试避免使用 GAC,它应该可以解决问题。

于 2018-02-07T20:39:43.867 回答