2016-06-01 23 views
1

我有个问题,我找不到在编译时检测windows版本的方法。在C#中为Os版本定义

我的目的是创建一个依赖于Interface的可执行文件,它只在特定版本的Windows中定义。

为了让我的可执行文件跨越Windows版本,我希望能够为特定的Windows版本定义include和部分代码。

首先,编译时是否可以包含特定的windows版本?

其次,如果不是,设计多窗口操作系统版本的应用程序的最佳方式是什么?每个版本有一个可执

非常感谢您的时间,

+0

也许我们可以解决这个问题:操作系统特定的调用是什么?也许有办法解决它们。 –

+1

为什么你想在编译时确定这个?你不能包含所有版本的代码,并确定在运行时调用哪些代码? – CodeCaster

+0

例如,如果我希望能够使用INetFwRule,那么INetFwRule3仅在Windows 10中定义。我想为每个操作系统在一个应用程序(.exe)中编写我的代码。 – Destrif

回答

2

你应该真的转过身来。运行时最好解决这个问题。你可以做什么:

  • 创建一个接口来定义你想要执行的动作;
  • 为不同平台创建单独的实现(在您的示例中,将有一个Windows10Implementation类,它调用INetFwRule3);
  • 然后,在您的代码中,检查Environment.OSVersion并为该特定平台创建实现类。

如果需要,您可以拆分不同的类库中的实现,因此您不必总是加载操作系统特定的内容,但仅在需要时才加载。

+0

好的,所以我将不得不创建多个.class,具体接口?否则Visual将不能编译:在Windows 7中包含INetFwRule3。因为Environment.OSVersion处于运行时。 – Destrif

+0

是的,您必须制作单独的类库。 –

+0

好吧,但包含Windows 10代码的库仍然无法在Windows 7上编译,因为INetFwRule3在Windows 7中不存在。我仍然不明白如何执行此操作。我有一个类似的问题在这里:http://stackoverflow.com/questions/37454774/visual-studio-compile-error-in-windows-7-when-required-interface-is-defined-only – alexandrudicu

0

是否要触发正在运行的应用程序的某些源代码的编译?我可以想象这是可能的。在这种情况下,你应该能够在Environment.OSVersion

但更好的方法是找到OS版本:

..包括所有版本的代码,并确定在运行时调用的代码。

由CodeCaster在评论中提出。