如何有效地为.Net Core, Framework,创建兼容性垫片Standard?
版本: Framework 4.6.1 ; Core 2.0; Standard 2.0.
例如,以下 3 件事很有趣,可以在.net core和.net standard之间使用.net framework:
System.Windows.Threading.Dispatcher……System.ComponentModel.ItemPropertyInfo.Descriptor甚至
System.Windows.Controls.MenuItem……
事实上,看起来需要更多这些外壳。当然,它们可以手动创建。但也许有一种更有效的方法来避免机械工作?
如果手动完成,则以粗略的示例说明任务:
例如,Core 2.0没有为Dispatcher.
制作了一个抽象包装器/接口/外观,:
public enum DispatcherShimPriority
{
Background
//...
}
public interface DispaicherShim
{
void Invoke(Action action, DispatcherShimPriority prio);
void BeginInvoke(Action action, DispatcherShimPriority, prio);
}
这里有2个实现:
public class DispatcherCore: DispaicherShim;
//здесь по началу можно просто вызывать Action
和
public class DispatcherFramework: DispaicherShim;
//здесь используется реальный Dispatcher внутри
接下来,制作了某种多用途的激活器类,例如,Shims其中:
public static DispaicherShim CreateDispatcher()
{
#if NETCOREAPP2_0
return new DispatcherCore();
#else
return new DispatcherFramework();
#endif
}
因此,获得了可用于框架和核心应用程序的外壳。
创建这样的外壳需要大量的机械工作。直觉上,在我看来,没有必要做这项工作,有现成的解决方案......
了解Microsoft.Windows.Compatibility包。我的意思是为该包未涵盖的元素创建包装器。
我听说过Microsoft.Windows.Compatibility.Shims,但我怀疑对于包本身未涵盖的元素没有包装器。
总体目标是将 WPF 应用程序的主体转换为潜在 Web 客户端的核心(留下工作的 WPF),尽管主体的 .net 框架的许多元素并未转换为核心。
至此,我至少找到了令人满意的方法来创建兼容性垫片。也许有更有效的方法。
谢谢来自捷克共和国的Firda 。这是他的回答
1)原则上,一个简单的通用shell就足够了
例子:
1.a) Visual Studio片段
驱动器
石门
垫片
西米特
shimprop - 类似,尚未完成
1.b) 分数说明
NETCORE和NETFULLsdk 样式的
.csproj文件,以明确NETFULL和NETCORE:2) 允许遗传的更高级版本
2.a) 对象
3)GUI控件的现成“双打”(Eto.Forms)
(通常,Eto.Forms 有更广泛的用途——它们本身已经是包装器)