asp.net mvc 2.0升级到 asp.net mvc 5.0过程和注意事项(asp.net mvc 2.0-asp.net mvc 4.0同理)

广告:阿里云新人专场

旧环境:asp.net mvc 2.0 asp.net 3.5 sp1 visual studio 2010
新环境:asp.net mvc 5.2.7 asp.net 4.8 visual studio 2022

类库可以直接升级,无须特殊配置

1 准备工作
a 模板方案建立:新建解决方案,新建web mvc应用程序项目空(目标 asp.net 4.8,添加文件夹和核心引用都不要选,高级 https配置也不要选)保存。此解决方案文件可作为参考。

b 正式升级,打开旧的解决方案,能加载的类库直接升级到目标asp.net 4.8(由目标asp.net 3.5 sp1改成目标 asp.net 4.8),不能加载的项目先卸掉。
打开我的电脑,把原先旧web mvc项目目录改名 ;
visual studio 2022打开的解决方案里面,新建web mvc项目,名称与旧的mvc项目同名,程序集名称和默认命名空间也改成原先命名空间名称(一般与旧web mvc项目名称同名)。

2 复制(最好剪切,防止漏掉文件)改名目录项目文件到新项目目录,包含到新web mvc项目中。

3 引用 system.web.mvc 5.2.7 复制到本地
引用 Newtonsoft.Json 13.0.1 复制到本地

引用 System.Runtime.Serialization
引用 System.Web.WebPages.Razor.dll 3.0.0 复制到本地
引用 Microsoft.Web.Infrastructure.dll 1.0 (Master控件需要)
引用其他层原先的类库,并按原先顺序配置依赖项 如:RouteDebug.dll Gma.QrCodeNet.Encoding.Net35.dll

更新 MvcViewEngine类 引用的类库 system.web.mvc 为新版本 5.2.7

Mvcmode类去掉 System.xml引用
Mvcbll类去掉 System.Window.Form引用
Mvccom类去掉 Microsoft.mshtml
注意:web.config <namespaces></namespaces>引用的命名空间,必须要复制到bin目录下面,也就是引用时开启复制到本地选项。

4 配置web.config 复制旧的必要字段到新的 web.config
如:

<system.web>
<compilation debug="true" targetFramework="4.8"/>
<pages>
<namespaces>
<!--<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Routing"/>-->
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Html"/>
<!--<add namespace="System.Web.WebPages"/>
<add namespace="System.Web.WebPages.Razor"/>-->
<add namespace="System.Collections.Generic"/>
<add namespace="System.Data"/>
<add namespace="FeiShareLibrary"/>
</namespaces>
</pages>
</system.web>

集成管道模式需要加:

<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<add name="HttpImageModule" type="Mvccom.HttpImageModule,Mvccom"/>
</modules>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<!--以下为经典模式用-->
<add name="mvc64" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
</system.webServer>

5 如果有webform页面,相应目录web.config需要配置

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
</configuration>

6 设置嵌入的资源:

AssemblyInfo.cs 添加 :
[assembly: System.Web.UI.WebResource("Mvcb2b.Scripts.class.js", "application/x-javascript")]

7 WebResource.axd 404错误,提示:无效的 Webresource 请求
ASP .Net 3.5应用程序升级到.NET 4.8提示:webresource.axd 404 错误 ,参照上一条 设置嵌入的资源

8. 提示:访问aspx文件提示分析器错误消息: 未能加载类型“Mvcb2b.editors.Uphtml”
原因:web应用程序对应相应webform文件可能没有包含到项目当中。应该包括在项目中。

9 更改文件后,需要先生成(bin下有文件) 模板页面:ViewData 提示才不会出错

10 工具---Nuget包管理器---管理解决方案的Nuget程序包删除 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 包 (旧项目没有用到此项)
PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform (安装)
Uninstall-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform (删除)

11 asp.net 4.8相关的类库或者项目 --应用程序 设置那里 把自动生成绑定重定向 前面的勾去掉。

12 packages.config 文件是 管理Nuget程序包的配置文件,有它则可以读到当前 Nuget程序包信息。可以删除不影响程序运行。

13 解决方案--属性--调试源文件删除相关选项内容

14 cooke 设置加 Cookiesname.SameSite = SameSiteMode.Lax; 不然 ajax和iframe页面可能不能设置 cookie

HttpContext.Current.Response.Cookies[CookieName].SameSite = SameSiteMode.Lax;
Cookiesname.SameSite= SameSiteMode.Lax;

15 升级后的项目调试时,要先把默认浏览器打开

16 IIS集成模式404页面不经过Application_Error,可在web.config加如下设置:

<httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough"> <!--Custom DetailedLocalOnly Detailed -->
<remove statusCode="404" subStatusCode="-1" />
<!--<error statusCode="404" prefixLanguageFilePath="" path="~/Main/Notfound" responseMode="ExecuteURL" />-->
</httpErrors>

17 模板下面web.config 也需要更新

项目发布后更新文件:
1 bin目录下面文件全部替换
2 web.config替换
3 webform程序目录下面增加或者替换 web.config
4 模板页面 themes/default/目录下面 web.config替换
5 config/53bknet.config 添加字段


常见错误参考:
检测到在集成的托管管道模式下不适用的 ASP.NET 设置-HTTP Error 500.22
http://www.53bk.com/news/detail/v13174.html

访问aspx文件提示分析器错误消息: 未能加载类型“Mvcb2b.editors.Uphtml
http://www.53bk.com/news/detail/v13173.html

IIs经典模式服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面
http://www.53bk.com/news/detail/v13176.html

以下为更新内容:

1 Ipcachebll
if (nIndexFDot == -1) //第一个
return true;

2 Fun.IsNum(String str) 更改

3 Fun.GetRealIP() 更改

ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
if (ip != "")
{
//ip = ip.Split(',')[0]; //获得代理ip,多个ip,最近一个为真实ip(但是可以伪造)
string[] splitter = { "," };
string[] IP_Array = ip.Split(splitter, System.StringSplitOptions.None);
int LatestItem = IP_Array.Length - 1;
ip = IP_Array[LatestItem];
}

4 System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5")

换成:

DESEncrypt.NewMD5(sKey, "md5")
NewMD5(sKey, "md5")
public static string NewMD5(string strData,string md5str)
{
string strResult = "";
using (var md5 = MD5.Create())
{
var result = md5.ComputeHash(Encoding.UTF8.GetBytes(strData));
strResult = BitConverter.ToString(result);
strResult= strResult.Replace("-", "").ToUpper();
}
return strResult;
}

5 控件id更新 ctl00开头webform里面control控件生成的id 去掉 ctl00_ /admin 目录下面文件需要全部更新

6 检查控件的缓存

广告:阿里云采购优惠专区

相关内容

编辑:Admin 时间:2022/1/4 9:59:38 阅览:221   返回    
asp.net mvc
升级
扫描关注53BK报刊官网
扫描关注阅速公司微信