LinqBridge打破Razor视图:基于.NET版本的文件输出限制

时间:2011-08-29 16:07:21

标签: visual-studio visual-studio-2010 nuget nuget-package

我们的项目使用了几个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

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

2 个答案:

答案 0 :(得分:1)

NuGet有support for different binaries for different .NET versions所以我建议您正在使用的软件包构建得非常糟糕。

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

  

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

     

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

答案 1 :(得分:0)

我们发现一种有用的方法是使用LinqBridge.Embedded Nuget包而不是标准的LinqBridge包。这将Linqbridge嵌入到项目中的C#文件中,因此不会被复制到bin文件夹并加载到Razor视图的上下文中。

这对我们很有用,因为我们引用的程序集仍然需要在.Net 2.0中构建,因为它也被2.0应用程序引用。因此,程序集使用LinqBridge.Embedded,而LinqBridge程序集不会在我们的4.0服务器的bin文件夹中结束。