广告:
旧环境: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 检查控件的缓存
广告: