C# .Net Dll 引用依赖关系

4

我编写了一个 DLL 库 MyLIB.dll(版本号为 1.0.0),它依赖于第三方 DLL 库 OtherLIB.dll(版本号为 1.0.0)。库 OtherLIB.dll 可以在 NuGet 上找到,我通过 NuGet 包管理器将其添加到 MyLIB.dll 项目中。

现在假设我正在编写一个新的应用程序,比如 MyAspNetMvcApp,并且通过 NuGet 将 MyLIB.dll(版本号为 1.0.0)添加到其中。它会自动添加 OtherLIB.dll(版本号为 1.0.0),因为它依赖于它。一切都正常工作,但是...

一个月后,OtherLIB.dll 的新版本发布了 - 版本号为 1.0.1。我通过 NuGet 更新了它。

现在,我的 ASP.NET MVC 应用程序停止工作,因为 MyLIB.dll 抛出了一个异常。它期望使用 OtherLIB.dll 的版本号为 1.0.0,但已经使用了更新的版本。

MyLIB.dll 项目的引用中,我可以看到 OtherLIB.dll 的 "Specific Version" 标志被设置为 "False",所以我不知道发生了什么...

除了在 web.config 文件中提供程序集绑定之外,是否有其他解决此问题的可能性?我应该如何添加对 OtherLIB.dll 的引用,以便在更新 OtherLIB.dll 到新版本时不会出现异常?


听起来你正在遭受 DLL 地狱的困扰。你是否尝试将其中一些 DLL 部署到全局程序集缓存 (GAC) 中? - GrantByrne
你的问题有些含糊不清。如果你不想使用 OtherLIB.dll 的v1.0.1版本,为什么要更新你的MVC解决方案呢? - Umair Ishaq
并不是我不想使用v1.0.1。我想使用最新版本的OtherLIB.dll,但我不想每次OtherLIB.dll发布新版本时都发布一个新版本的MyLIB.dll。我不希望我的库的用户在通过NuGet管理器更新OtherLIB.dll时遇到问题。 - Adam Sobaniec
@GrantByrne - 我不想将它添加到GAC或任何类似的地方,因为这两个库应该仅在NuGet上可用,并且尽可能简单易用。 - Adam Sobaniec
这更有意义。请查看位于此处的有关依赖项版本控制的NuGet文档。 - Logarr
实际上,问题与dll本身有关,而不是NuGet包。即使我将MyLIB.dll的NuGet包设置为始终依赖于OtherLIB.dll的最新版本,也无济于事。我甚至会说这会更加麻烦,因为它会下载一个MyLIB.dll不支持的OtherLIB.dll版本。无论如何,我发现MyLIB.dll项目中有两个额外的引用,其“特定版本”设置为“True”。我希望这是个问题。我明天会检查一下。谢谢。 - Adam Sobaniec
2个回答

3

我昨天在使用Oracle.DataAccess.dll时遇到了这个问题,它与visual studio web developer有关。

我的解决方案是:

右键单击您的项目解决方案(*.csproj)并编辑它。

在下面添加:

<PropertyGroup>

地点
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>

然后重新构建您的解决方案。在将它们包含到项目中时,您必须将这两个版本的dll分别放置在不同的目录中(必需)。

我已经这样做了

ora11 >> Oracle.DataAccess.dll (版本 11)

ora9 >> Oracle.DataAccess.dll (版本 9)

这样做可以让您的IDE同时使用这两个版本的DLL。


1
实际上这并没有帮助。在我的情况下,MyLIB.dll 依赖于 NuGet 上可用的 OtherLIB.dll(并且正在从中下载)。因此,无法将其“嵌入”到 MyLIB.dll 中。 - Adam Sobaniec

0

可能你的 MyLIB.dll 设定了使用特定版本的 OtherLIB.dll。进入你的 MyLIB 项目,点击 OtherLIB.dll 的引用。检查属性看是否设定 "Specific version" 为 true。


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