1

我们的项目使用了几个 NuGet 包,其中一些包引用了 LinqBridge,这是一个为 C# 2.0 重新实现 LINQ to Objects 的库。LinqBridge.dll 文件位于 /packages/PackageName/lib/20/LinqBridge.dll 下,因此它显然应该只适用于 .NET 2.0。

问题在于,即使解决方案中的每个项目都配置为构建为 .NET 4.0,LinqBridge.dll 二进制文件也会被复制到最终的 /bin 目录中,并在 Razor 视图中造成严重破坏。如果我在 IEnumerable 上执行 .Select(),则内置 LINQ 调用和 LinqBridge 提供的重新实现的调用之间存在不明确的调用。

我显然不需要重新实现的版本;如果我只是从输出 /bin 目录中删除 LinqBridge.dll,一切正常。然而,这不是一个可以接受的永久解决方案。

有什么办法可以配置一些东西来退出将该文件(用于旧的 .NET 版本)复制到 /bin 输出中?

编辑:我通过将其添加到我的解决方案属性中“构建事件”下的“构建后事件命令行:”命令中,将解决方案粘合在一起:

del $(SolutionDir)\bin\LinqBridge.dll

它仍然远非理想,但至少它让我的项目现在可以运行。

4

2 回答 2

1

NuGet支持不同 .NET 版本的不同二进制文件,因此我建议您使用的包构建得很糟糕。

我会联系软件包的作者,看看他们是否可以修复它们,以便只有 net11 或 net20 版本包含 LinqBridge。

支持多个 .NET Framework 版本和配置文件

许多库以特定版本的 .NET Framework 为目标。例如,您可能有一个特定于 Silverlight 的库版本,以及利用 .NET Framework 4 功能的同一库的另一个版本。您不需要为每个版本创建单独的包。NuGet 支持将同一库的多个版本放在一个包中,将它们保存在包内的单独文件夹中。 (更多的...)

于 2011-09-11T11:15:18.267 回答
0

A useful approach we found was using the LinqBridge.Embedded Nuget package instead of the standard LinqBridge package. This embeds Linqbridge as a C# file within your project, and hence does not get copied over to the bin folder and loaded into the context of the Razor view.

This was useful to us because an assembly we reference still needs to be built in .Net 2.0, as it is also referenced by a 2.0 application. Hence that assembly uses LinqBridge.Embedded, and the LinqBridge assembly does not end up in our 4.0 servers' bin folders.

于 2014-10-10T04:11:41.110 回答