C# 同一dll和EF的不同版本。

C# 同一dll和EF的不同版本。,c#,.net,linq,entity-framework,dll,C#,.net,Linq,Entity Framework,Dll,我们有几个项目将业务系统集成到不同的外部服务中。“我们”只编写中间件,无法控制任何一个系统。当新版本发生重大变化时,我们将不得不设法应对 我们使用的环境是VS2013、C#和EF 5.0-6.NN 我们所依赖的资源是: 许多实体框架模型(目前为第一个模型,但可能会发生变化)。 3个需要引用的DLL 这些资源一直向后兼容,直到周五,其中一个DLL中的一个字段的数据类型发生了突破性的变化。(从int变为string) 如何做到这一点: 是否可以加载针对不同版本数据库的相同EF? 我知道一个人将被迫通

我们有几个项目将业务系统集成到不同的外部服务中。“我们”只编写中间件,无法控制任何一个系统。当新版本发生重大变化时,我们将不得不设法应对

我们使用的环境是VS2013、C#和EF 5.0-6.NN

我们所依赖的资源是: 许多实体框架模型(目前为第一个模型,但可能会发生变化)。 3个需要引用的DLL

这些资源一直向后兼容,直到周五,其中一个DLL中的一个字段的数据类型发生了突破性的变化。(从int变为string)

如何做到这一点: 是否可以加载针对不同版本数据库的相同EF? 我知道一个人将被迫通过不同的dll加载它们,等等, 但是,我们应该如何处理saylinq查询等等

在热点是否可行?检查类型并重新创建整个LINQ表达式

if(typeof(Items.Prop) == typeof(int)){
  var things = from x in framework.Items where x.Prop = 2 select x;
} else if(typeof(Items) == typeof(string)){
  var things = from x in framework.Items where x.Prop = "2" select x;
}
不过,这应该会失败,这取决于linq表达式的计算,因为我们将它与错误的数据类型进行比较

或者应该使用

#ifdef __VER10
  var things = from x in framework.Items where x.Prop = 2 select x;
#endif
#ifdef __VER9
  var things = from x in framework.Items where x.Prop = "2" select x;
#endif
但是,有没有可能使用VisualStudio提供的自动化工具来实现这一点呢。正确的可执行文件的部署本身就成了一个问题


这个问题对于堆栈溢出来说可能过于宽松,我认为这是一个常见的问题,但我不确定如何通过谷歌找到答案。

您应该始终为不同版本的API/资源提供特定的可执行文件。
使用Visual Studio无法真正实现自动化,但可以使用Configuration Manager创建不同的生成配置。
请参见此处,了解如何调整参考:
然后,您可以通过转到Project->Properties->build->Conditional configuration symbols来指定生成变量,如
\uuuu VER9
\uuu VER10


这里简要介绍了这些符号,但它基本上就是您想要的:

已经回答了-很好,可以派上用场。非常感谢。即使上面的评论(Nader)可以帮助解决我的问题,每次构建一个新的资源也是有意义的,特别是通过编译器硬验证数据类型。谢谢,现在我有了一个出发点。