由於工做內容的緣由須要兼容 XP,而 XP 最多支持到.Net Framework 4.0。所以沒法享受到 .Net Core 帶來的一堆很好用的庫,好在不管 corefx 仍是 Asp.Net Core 都是開源的,咱們能夠自行修改編譯出支持 .Net 4.0 的版本。git
Net 4.0 相比 4.5 和 netstandard 1.0,主要的差異有:github
這些寫過 Asp,Net Core 的應該很熟悉,他們也能夠用在普通的 .Net 桌面程序中json
<dependentAssembly> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Threading" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.12.0" newVersion="4.0.12.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.12.0" newVersion="4.0.12.0" /> </dependentAssembly>
下面的示例是使用了api
Caliburn.Microapp
Microsoft.Extensions.DependencyInjection異步
Microsoft.Extensions.Configurationasync
Autofacide
Autofac.Extensions.DependencyInjectionui
AutoMapperspa
AutoMapper.Extensions.Microsoft.DependencyInjection
public class AppBootstrapper : BootstrapperBase { public IConfiguration Configuration { get; } public IServiceProvider ServiceProvider { get; private set; } private IContainer _container; public AppBootstrapper() { Configuration = LoadConfiguration(); Initialize(); } private IConfiguration LoadConfiguration() { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("config.json", false, false); return builder.Build(); } protected override void Configure() { var serviceCollection = new ServiceCollection(); ServiceProvider = ConfigureServices(serviceCollection); } public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddOptions(); services.AddAutoMapper(AssemblySource.Instance.ToArray()); services.AddSingleton<IWindowManager>(new WindowManager()); services.AddSingleton<IEventAggregator>(new EventAggregator()); services.AddSingleton(p => _container); var builder = new ContainerBuilder(); builder.Populate(services); builder.RegisterAssemblyModules(AssemblySource.Instance.ToArray()); _container = builder.Build(); return new AutofacServiceProvider(_container); } }
看起來和在 Asp.Net Core 中沒什麼差異。
雖然工做環境限制咱們只能使用 .Net 4.0,但俗話說沒有條件,創造條件也要上。將它們移植到 .Net 4.0 也是跟上 .Net Core 和開源的步伐的一種努力吧。
關於這些包和相關的版本號能夠在 https://www.myget.org/feed/Packages/dotnet40 查看
關於移植到 .Net 4.0 的計劃我建立了一個 github 組織,裏面包含移植的全部項目 https://github.com/dotnet40/
最後,感謝你們花時間閱讀!