因为工作内容的原因需要兼容 XP,而 XP 最多支持到. Net Framework 4.0。因此无法享受到 .Net Core 带来的一堆很好用的库,好在无论 corefx 还是 Asp.Net Core 都是开源的,我们可以自行修改编译出支持 .Net 4.0 的版本。
Net 4.0 相比 4.5 和 netstandard 1.0,主要的差别有:
这些写过 Asp,Net Core 的应该很熟悉,他们也可以用在普通的 .Net 桌面程序中
- <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>
下面的示例是使用了
Caliburn.Micro
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Configuration
Autofac
Autofac.Extensions.DependencyInjection
AutoMapper
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/
最后,感谢大家花时间阅读!
来源: http://www.cnblogs.com/sunnycase/p/7239507.html