AspNet开发问题

标签: Asp 分类: Asp 创建时间:2020-08-25 00:47:40 更新时间:2023-10-20 11:23:25

从别人那里继承了一个Asp.net的工程,没有文档,没有说明,只有源代码,于是只能是拿起来慢慢的摸索,于是我重新安装了Visual Studio 2019,打开了源代码。因为源代码就是一个工程,于是我就双击.sln,希望打开解决放案,于是问题就接连出现了。

1.你不具备访问 IIS 配置文件的权限。要在 IIS 上打开和创建网站,需要使用 Administrator 帐户运行 Visual Studio。

这个问题是刚打开解决方案的时候出现的

根据参考文章中的思路,解决了相关的问题,于是就没有截图了。解决方法就是:
(1) 打开C:\Windows\System32\inetsrv\config目录,弹出询问窗口时选择“继续”。

(2) 再接着打开\Export目录,也选择“继续”。

(3) 然后重新打开web项目,就可以了。

问题真是奇奇怪怪。

2. Web 应用程序项目 已配置为使用 IIS。未能找到 Web 服务器

解决完上面的权限问题之后,就出现了这样的问题:Web 应用程序项目 ProHengWeb 已配置为使用 IIS。 未能找到 Web 服务器“http://localhost:9104

我右键项目解决方法,通过打开项目配置文件,或者是找到你的项目的工程文件,后缀名为csproj文件,然后搜索找到属性,将其属性值True改为False.x项目就能正常打开了。

如果想再次配置为IIS,右键项目名称,然后选择属性,打开web配置,填入项目URL等内容,保存,就可以了。测试相关的IIS端口,也是如此设置。

参考文章:
1.Web应用程序项目XXX已配置为使用IIS (根据这个文章,虽然可以打开项目了,但是我还是不知道原因)
2.使用 Visual Studio 的 ASP.NET Web 部署:部署到测试 (本来想查一下,VS中的代码如何部署到IIS上,没有说明使用IIS)

3.未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

(1) 删除bin下面的Newtonsoft.Json.dll

(2) 删除packages.config中关于Newtonsoft.Json的定义

(3) 删除Web.config中的runtime下的Newtonsoft.Json定义

(4) 打开NuGet包管理器

(5) 搜索并重新安装Newtonsoft.Json.dll

4.由于找不到编译器必需的类型“System.Runtime.CompilerServices.TupleElementNamesAttribute”,因此无法使用元组来定义类或成员。是否缺少引用?

这是因为没有ValueTuple,这个引用,所以只需要使用NuGet进行安装就好了。

5.扩展方法必须在非泛型静态类中定义

解决方法就是增加static关键字。

1
2
3
4
5
6
7
8
9
// 错误
public class RSAUtil {

}

//正确
public static class RSAUtil{

}
参考文章:
1.扩展方法必须在非泛型静态类中定义 (由于时间紧迫,我也就没有具体的去研究了)

6.不安全代码只会在使用 /unsafe 编译的情况下出现

其实就是要选择项目右键,然后选择属性->生成,然后就是要选择全部配置

7.IIS中安装.net4.5

有时候,在VS Studio中开发的程序,需要用到很多的库,而这些库又使用到了比如最新版本的.net框架,比如4.5或者是4.6,在IIS中如何升级或者安装更高版本的.net运行时呢?

刚开始我根据参考文章,执行了下面的命令,虽然没有报错,但是还是没有相应版本的应用程序池。

1
2
3
4
dism /online /enable-feature /featurename:IIS-ISAPIFilter
dism /online /enable-feature /featurename:IIS-ISAPIExtensions
dism /online /enable-feature /featurename:IIS-NetFxExtensibility45
dism /online /enable-feature /featurename:IIS-ASPNET45
参考文章:
1.Windows 10 IIS 安装 .Net4.5 (这个好像不管用,即便按相关的内容升级和安装了.net,但是IIS中还是没有相应的应用程序池)
2.Win10 IIS 安装.net 4.5的方法
3.如何设置.net Framework 4.5版本 IIS 7应用程序池

8.本地调试没有问题,但是部署到IIS中应用程序总是出现未响应问题

在vs studio中开发Asp.net应用,调试的时候总是没有问题,但是部署到IIS中,登录页面还是可以使用的,但是登录之后,总是出现未响应的错误,后续页面登录不上,登录页也没有了。

(1) 刚开始我以为是.net版本的问题,于是升级了项目的.net版本,从4.0升级到4.5,然后再降下来,降到2.0,同时升级IIS的.net版本,还是无效。

(2) 因为应用程序不是一开始就无响应,登录页面是可以进入的,于是我通过日志打印的方式,进行一步一步的发布后调试,最后定位到了,登录页面的Page_Load方法。在该方法中,当应用程序进入到this.IsPostBack条件之后,无论代码块中有无内容,应用程序都没有返回值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
protected void Page_Load(object sender, EventArgs e)
{

if (this.IsPostBack)
{
// 无响应
}
else
{
// 有响应
}

}
}

(3) 根据参考文件5提供的思路,我就把页面中全部能看见的 runat=”server” 的标签,一个一个的注释掉,注释一个部署以下,测试一下。最后也还是出现了一些效果的,就是在点击登录后,不会出现页面无响应问题了,原样返回了开始的页面。这是一个突破口,于是我一点点的把注释掉的内容打开。

页面中原来有两个控件,是这样的。

1
2
3

<input type="hidden" runat="server" id="PublicModulus" />
<input type="hidden" runat="server" id="PublicExponent" />

在原有的代码中,只有在页面初次加载的时候,才会初始化这两个控件,但是在this.IsPostBack没有进行赋值。

1
2
3
4
5
6
7
8
9
10
11
12
13
// 原代码
protected void Page_Load(object sender, EventArgs e)
{

if (this.IsPostBack)
{
}
else
{
this.PublicExponent.Value = RSAUtil.PublicPars.PublicExponent;
this.PublicModulus.Value = RSAUtil.PublicPars.PublicModulus;
}
}

修改后,改为无论是不是this.IsPostBack,都进行初始化,这样暂时没有了无响应的问题。

1
2
3
4
5
6
7
8
9
10
11
// 现代码
protected void Page_Load(object sender, EventArgs e)
{

if (this.IsPostBack)
{
}

this.PublicExponent.Value = RSAUtil.PublicPars.PublicExponent;
this.PublicModulus.Value = RSAUtil.PublicPars.PublicModulus;
}

(4) 经过最后的测试和修改,页面出现未响应的问题,是没有在this.IsPostBack条件中,对具有runat=”server”标志,运行在服务端的控件进行初始化造成的。这个问题非常的隐蔽,日志文件中也没有相应的内容,IIS也不会给出相应的提示,所以定位起来就比较麻烦和耗费时间。

参考文章:
1.Page_Load()无事件响应的解决 (这里我以为是IIS不支持application/x-www-form-urlencoded,可是没有找到IIS设置支持这个Content-Type的地方)
2.分享asp.net 网站部署一段时候后无法响应经验 (这篇文章是说IIS版本的问题)
3.解决IIS无响应假死状态,asp突然无法访问重启后可以使用是什么原因 (这篇文章没有用)
4.在 Page_Load里写Response.Write无反应? (这篇文章也没有用)
5.Page_Load执行两次的解决方法 (这篇文章虽然没有用,但是提供了一个思路,就是:所以在出现页面非正常的多次载入时,可以检查一下自己的HTML源代码,看看时不是有哪个标签的属性被赋了非法值了。我就寻着这个思路进行了相关代码修改。)
6.Win10下配置IIS并调试ASP程序 (暂时还没有用到这个方法)
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。