Jen*_*enB 21 .net c# asp.net asp.net-mvc asp.net-core
我刚刚接受了一些我不熟悉的技术任务 - 我们可爱的Windows ASP.NET MVC Web应用程序应转换为在linux环境中使用.
我在健康方面工作,我们拥有绝对不会丢失的用户数据或者头部会滚动(我们或他们的).
我通常不是C#/ ASP.NET人 - 尽管我可以适应这项任务.我一直在阅读官方文档@ http://docs.asp.net/en/latest/getting-started/installing-on-linux.html并且可以看到这个任务实际上意味着'瞄准.NET CORE (或单声道)框架'.
我已经google了,似乎没有事实上/简单的迁移方式 - 只需学习新的模块化设置,将配置打入project.json,然后离开!在我尝试手动执行此操作之前 - 您有什么信息可以告诉我吗?一些系统化的流程要遵循?也许我之前应该读过一些"陷阱"?
该项目使用NHibernate和Autofac进行DI - 看起来非常标准.我只是想知道在Linux服务器上运行它需要多少读取/试验 - 最终这才是最重要的.
Ger*_*vis 19
下面的答案已经过时,但概述了将.Net 4.5 MVC应用程序更新到.Net Core框架的工作解决方案..Net Core已准备好投入生产
Core CLR和BCL尚未准备好投入生产.期.至少还没有,可能不会持续六个月到一年.在这一点上,依赖支持更加未知.Autofac没有核心clr兼容库.他们会吗?这是开始研究的地方.他们什么时候?这可能是一段时间,这是一个不受你控制的项目要求.
即使对于非生产工作,.NET核心仍然很早.简单的答案是告诉你的老板等待六个月,看看一切都是如何摆脱,而不是潜在地燃烧数百个工时或预生产代码.当然,这可能会被忽略,所以如果我绝对不得不这样,今天我将如何进行.
你的问题中有一些变化.您正在寻求从ASP.NET 4.5迁移到ASP.NET 5.您还希望以新框架为目标.最后,您计划在新环境中运行该解决方案.这些中的每一个都可以独立处理(尽管有些不是在其他之前),所以这就是我要采取的路线.
阶段0) 4.5.1之前没有DNX支持的.Net框架版本.您将使用DNVM选择要定位的DNX.您无法定位不可用的内容,因此如果您的项目当前正在针对4.5.1更新之前的某些内容进行定位,并确认没有重大更改.如果有修复并保持condebase与4.5.1或更高版本兼容.
阶段1) DNVM和DNX与现有的"完整".Net Framework(4.5.1+)和.Net Core(5.0)兼容.跳转到.Net Core 5上运行的ASP.NET 5可能很诱人,但这是一个错误.由于.Net Core需要基于dnx的项目,而基于dnx的项目也支持.Net 4.5.1(或更高版本),第一步是切换到asp.net 5引入的新项目结构.可能需要一些实验并且文档在这一点上是简洁的.目标将是您现有的应用程序(运行在.net framework 4.5.1上的asp.net 4.5在dnx中运行.没有项目迁移向导,因此您将从一个新的dnx项目开始(使用asp.net 5"空")模板)和复制你现有的代码.这似乎是一个小小的改变,但它打破了应用程序与仅在主机上安装的框架的紧密耦合.一旦你在dnx环境中运行代码库,你就已经奠定了基础针对其他环境.
阶段2)迁移到asp.net 5(MVC 6).您仍将瞄准"完整".net框架并在Windows上运行..Net核心不支持(并且永远不会)支持您项目的现有asp.net版本(4.5).然而,asp.net 5兼容完整框架(4.x)和核心(5).这使您能够升级到asp.net 5而无需更改为.net核心.第2阶段结束时的目标是使用在dnx中运行.net 4.x的asp.net 5的Web应用程序(功能).是的仍然在Windows上,但我们越来越接近跨平台兼容性.
阶段3)获取.net核心不支持的现有BCL引用和依赖项的清单列表.重构.net核心不支持的现有BCL引用.请记住.net核心是完整框架的一个子集,因此您可能会很幸运,所有现有代码都符合该子集,但如果您不这样做,则需要找到一种方法来实现与.net核心中可用子集相同的功能.
对于依赖项(即Autofac),您很可能需要升级,并且可能存在需要解决的重大更改.第3阶段的目标和结束是第2阶段的Web应用程序,但没有任何与核心bcl不兼容的依赖关系.您无法控制的最大因素是第三方软件包.如果autofac没有释放核心clr兼容包,那么你就会陷入困境(或者需要考虑使用替代方案).
阶段4)阶段3的结束意味着您具有.net核心兼容堆栈,但您仍然以完整框架为目标.现在最后你将目标切换到核心clr(dnvm支持多个并排运行时= dnx).此时我仍会部署到Windows,一次只能部署一个变量.在第4阶段结束时,您可以在Windows环境中托管的.net核心上运行Web应用程序.
阶段5).现在,您可以解决任何Windows依赖项.至少要从IIS迁移,确保以操作系统中立的方式完成任何路径处理,并且不会调用特定于Windows的资源(如注册表).到目前为止,核心clr和bcl应该更加成熟,因此你不会试图瞄准移动目标.
在我看来,试图一气呵成是一个灾难的秘诀.如此多的并行更改将从非功能性解决方案开始,它可能仍然无法正常运行.通过分阶段进行,您可以将解决方案迁移到交叉兼容的目标,同时在每个步骤仍然具有功能输出.
我知道这是一个老问题,但我猜需要更新.因为一些生产应用程序将asp.net mvc迁移到asp.net核心.我收集了一些一步一步的迁移.我希望它会有用.
对的,这是可能的.
1)创建一个与前一个项目同名的新的空核ASP.NET Web应用程序.所以名称空间将匹配.
2)安装Microsoft.AspNetCore.Mvc
和Microsoft.AspNetCore.StaticFiles
NuGet包.ASP.NET运行时是模块化的,您必须明确选择提供静态文件
3)打开.csproj文件并添加PrepareForPublish
目标:例如
<Exec Command="bower install" />
</Target>
Run Code Online (Sandbox Code Playgroud)
4)打开Startup.cs文件并更改代码以匹配以下内容:
namespace WebApp1
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
5)添加一个Controllers文件夹.然后将名称为HomeController.cs的MVC控制器类添加到Controllers文件夹中.
使用以下内容替换Views/Home/Index.cshtml文件的内容:
<h1>Hello world!</h1>
Run Code Online (Sandbox Code Playgroud)
6)从ASP.NET MVC项目迁移功能.我们需要移动以下内容:
7)将每个方法从ASP.NET MVC OldController复制到NewController
8)复制About.cshtml
,Contact.cshtml
以及Index.cshtml
从ASP.NET MVC项目的ASP.NET核心项目Razor视图文件.
9)运行ASP.NET Core应用程序并测试每个方法.
10)对于静态内容添加名为bower.json
项目根目录的Bower配置文件(右键单击项目,然后单击添加>新项> Bower配置文件).将Bootstrap和jQuery添加到文件中
11)将旧的MVC项目中的favicon.ico文件复制到ASP.NET Core项目中的wwwroot文件夹.
12)将_ViewStart.cshtml
文件从旧的ASP.NET MVC项目的Views文件夹复制到ASP.NET Core项目的Views文件夹中._ViewStart.cshtml
ASP.NET Core MVC中的文件未更改.
13)创建视图/共享文件夹.
14)将_Layout.cshtml
文件从旧的ASP.NET MVC项目的Views/Shared文件夹复制到ASP.NET Core项目的Views/Shared文件夹中.
15)使用以下新闻更改剃刀视图中的一些旧功能
@Styles.Render("~/Content/css")
为<link>
要加载的元素bootstrap.css
@Scripts.Render("~/bundles/modernizr")
.注释掉该@Html.Partial("_LoginPartial")
行(用行包围行)@*...*@)
.@Scripts.Render("~/bundles/jquery")
为<script>
元素.@Scripts.Render("~/bundles/bootstrap")
为
<script>
元素.我想你在这里混淆了一些问题.您最初的问题陈述是您当前在Windows上运行的MVC应用程序需要在Linux上运行.这本身不是问题.然后你继续说你研究了它,并得出结论,你需要安装ASP.Net 5(核心)才能在Linux上使用你的网站,这是错误的.
ASP.Net MVC项目在Mono中运行良好.
Mono是基于ECMA的C#标准和公共语言运行时的Microsoft .NET Framework的开源实现.
话虽这么说,Mono是一个开源实现.ASP.Net 5是Microsoft的官方产品,但它不能直接向后兼容现有的代码库.它也运行在Mono之上.
您应该与项目经理一起评估您的要求,以确定是否可以使用Mono; 在某些敏感领域(例如医疗保健),开源并未被广泛接受.准备解释虽然Mono Framework是开源的,但在Mono Framework中运行的应用程序却不是.但是,一般来说,采用Linux的组织使用的开源软件比他们意识到的要多,无论他们是否愿意.
总而言之,您可以在Linux上运行您的MVC应用程序,而无需使用Mono Framework对代码库进行大量更改.如果使用官方的Microsoft ASP.Net 5 Linux发行版是一个项目要求,那么在关注Linux与Windows之前,您将重写您应用程序的重要部分.
还有一个附录要注意,ASP.Net 5几乎完全是来自微软的Open Source,因此反对使用Mono的论点可能没有实际意义,即使它可能是一个提到的问题.
归档时间: |
|
查看次数: |
12066 次 |
最近记录: |