如何创建类库的版本以支持多个版本的.NET Framework?

时间:2012-06-15 14:42:54

标签: .net visual-studio-2010

我正在尝试创建一个类库的系列,这些类在组织内的多个应用程序之间使用。其中一些应用程序面向.NET 3.5,一些目标4.0。

我们希望提供两个版本的程序集,一个定位3.5和一个定位4.0,以便主机应用程序可以选择最适合它们的程序集。

3.5和4.0版本之间存在一些细微差别:

  • 由于被.NET 4.0版本取代,某些类已被删除。
  • 已添加一些类以帮助处理.NET 4.0引入的类。
  • 4.0版本中的某些类已被修改,以利用4.0中的一些增强的线程支持。

是否有任何解决方案可以让我重复使用代码库的重叠部分并阻止简单地分支源树?

我的目标是生成针对其指定框架的多个版本的程序集,这些框架可以转换为NuGet包并在我们的内部订阅源中公开。

3 个答案:

答案 0 :(得分:6)

这听起来像是条件编译器指令的工作。

用以下代码填写代码:

#If NET35
...
#End If

#If NET40
...
#End If

从这里开始,您必须将NET35NET40编译常量添加到项目中,我建议首先在配置管理器中创建自定义配置,例如DebugNET35,{ {1}},DebugNET40ReleaseNET35。创建这些配置后,您可以切换到每个配置并转到项目的高级编译选项,您可以在其中设置自定义常量ReleaseNET40NET35,具体取决于当前配置。

您也可以在此对话框中设置目标框架,但它将全局设置您的框架版本。要为每个配置设置自定义目标框架,请按Pierre's Steps

之后,选择一个配置并编译!我已经使用这种技术为应用程序的“Demo”和“Full”版本共享相同的代码库。

希望Visual Studio的未来版本将包括框架版本自动定义:https://connect.microsoft.com/VisualStudio/feedback/details/113323/include-framework-version-defines-automatically

编辑:.NET Framework博客中有一篇新文章讨论了在Visual Studio 2010和2012中编写可移植代码库:http://blogs.msdn.com/b/dotnet/archive/2012/07/06/targeting-multiple-platforms-with-portable-code-overview.aspx,这看起来更清晰。

答案 1 :(得分:3)

可能有更好的方法可以做到这一点,但是在针对不同平台时我已经完成了以下操作。 (使用XNA的Xbox与PC)

您可以在配置中使用不同的平台目标创建多个* .csproj。例如,如果它是一个项目,您将拥有2 * .csproj文件,一个用于.NET 3.5,另一个用于.NET 4.0。

在配置管理器中,您将为每个版本设置不同的平台。 * .csproj实际上会引用相同的文件。您还可以设置构建条件符号,以便可以将.NET 3.5与.NET 4.0作为目标。此外,如果您需要重写整个文件,* .csproj(s)将引用自己的文件。

答案 2 :(得分:1)

如果您计划编写一系列支持多个.NET框架(和/或平台)的类库,您可能需要创建一个“可移植类库”。

完整详情请参阅博文Targeting Multiple Platforms with Portable Code (Overview)。在Visual Studio 2012中,您只需创建一个新的“可移植类库”项目,而在Visual Studio 2010中,您需要先安装Portable Library Tools

使用PCL项目,您可以定位以下平台:

  • .NET Framework 4,4.0.3和4.5
  • 用于Metro风格应用程序的.NET(我认为它包括Windows Phone 8和Windows 8 RT)
  • Windows Phone 7.x
  • Silverlight 4和5
  • Xbox 360

但是,请注意,此列表中当前不包含.NET Framework 3.5。编写了可移植库工具,以便将来可以添加其他平台,Mono支持目前位于列表的顶部。