2017-01-28 42 views
1

我需要在.net v2.0中构建一个DLL,作为外部DLL(CLR程序集)从SQL Server 2008中调用。这个DLL必须在.net v2.0中才能与我们的SQL Server版本兼容,并且只能在SQL Server和.NET中的其他C#功能之间架起一座桥梁。所以我想了解.Net V4.5中的另一个DLL,但是我无法编译它!我有休耕警告:我们可以在.Net V2.0中引入另一个内置.Net V4.5的DLL吗?

警告MSB3258:主要参考“my_dll”无法得到解决,因为它在.NET Framework组件的间接依赖“mscorlib程序,版本= 4.0.0.0,文化=中立, PublicKeyToken = b77a5c561934e089“,它具有比当前目标框架中的版本”2.0.0.0“更高的版本”4.0.0.0“。

我们可以忽略程序集版本的可兼容性吗?或者我们可以有另一种解决方案来调用SQL Server 2008中.net V.4.5开发的任何函数吗?

+2

这不能工作,因为您的SQL Server的CLR版本也是2.0。它不能加载4.5程序集,即使该程序集根本没有引用其他系统程序集(它当然是这样)。重新编译*所有*程序集涉及到目标.NET 2.0,或升级您的服务器。 –

+0

@JeroenMostert看起来像你在评论框中输入了一个答案。 –

+0

@MartinSmith:我知道,但那是因为我讨厌给出答案“不,你不可能做到这一点”,如果没有我热爱问题的大脑流失,试图非常非常难以找到某种解决方案(“也许你可以滥用COM!也许你可以在这种情况下使用程序集版本标题!也许......“关闭)。而且OP确实要求另一个解决方案,而且我知道已经有答案的问题吸引的眼睛更少。 ...我现在不再散漫了。 –

回答

0

我不确定我在回答你的问题,但回答它你只需要改变项目依赖到.NET 4.5。 .NET框架可以引用其他框架版本,但您必须考虑依赖关系的顺序。如果2.0使用的是4.0库,那么它会失败,因为它没有对组件自带的引用。当你的项目被编译时,它被放置在一个单独的程序集中,并且程序集必须引用所有正在使用的成分。然而;如果你的项目是单独的dll,听起来像是这样,那么只要4.0成员没有在程序集中公开公开就可以参考它们。然而;这意味着该DLL需要安装4.0的环境才能运行。

为了运行相同程序集的不同版本,您需要将assemblyBinding添加到您的项目配置中。

这是有点难以遵循,但看看这篇文章,看看它是否有助于你更好地理解如何实现这一点。

Post

0

按本answer here,可以通过暴露需要作为COM组件以引用.NET 4.5装配。 .Net的所有版本都以COM为核心,因此它可以作为“最低公分母”沟通渠道。根据您的要求,您可能还想了解使用命名管道,IPC甚至Web服务。

相关问题