我们一直在尝试为我们的应用程序预编译视图,以改善初始表单显示的渲染时间。
我们正在使用Visual Studio 2017,MVC 5,MS成员资格进行安全登录。
在没有“发布期间预编译”的情况下发布到Web应用程序站点时,将其设置为所有版本,并且应用程序按预期运行并显示登录表单。
如果设置了'发布期间预编译',则构建正常。
但是在启动应用程序时,我们收到“HTTP错误404.0 - 未找到”错误 并且没有显示登录屏幕!
我已检查文件夹的安全性,位置路径权限允许所有用户。
在使用预编译设置发布时,我收到以下警告;
2> ASPNETCOMPILER(0,0):警告:以下程序集依赖于高于目标的.NET Framework版本,并且在运行时导致失败时可能无法正确加载:Microsoft.ReportViewer.WebDesign, Version = 14.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91。依赖项是:System.Windows.Forms,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089。您应该确保依赖程序集对于目标框架是正确的,或者确保要处理的目标框架是从属程序集的目标框架。 2> ASPNETCOMPILER(0,0):警告:以下程序集依赖于高于目标的.NET Framework版本,并且在运行时可能无法正确加载导致失败:Microsoft.ReportViewer.Design,Version = 14.0 .0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91。依赖项是:System.Windows.Forms,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089。您应该确保依赖程序集对于目标框架是正确的,或者确保要处理的目标框架是从属程序集的目标框架。 2> ASPNETCOMPILER(0,0):警告:以下程序集依赖于高于目标的.NET Framework版本,并且在运行时导致失败时可能无法正确加载:Microsoft.Build.Tasks.Core,Version = 14.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a。依赖项是:System.Security,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a; System.Windows.Forms,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089。您应该确保依赖程序集对于目标框架是正确的,或者确保要解决的目标框架是从属程序集的目标框架。
我试图通过在web.config的部分添加装配线来摆脱这些警告,但没有效果。
答案 0 :(得分:2)
在没有看到任何.config
或.csproj
文件的情况下,最好的猜测是您缺少Web.config
文件中的以下部分:
<system.web>
<compilation>
<assemblies>
<add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
</compilation>
<system.web>
仅当引用的DLL在GAC中时才有效。如果不是:
/Bin
文件夹。参考文献:
Visual Studio是一个很棒的工具。但是,在具有多个项目的解决方案中甚至在项目文件和配置文件之间保持同步依赖性并不是那么好。通常,当您需要升级或降级依赖项时,主项目的.csproj
文件与一个或多个依赖程序集.csproj
文件之间的某些内容将不可避免地出现不一致,或者甚至可能不同步使用.config
个文件。
通过此类方案的唯一100%可靠方法是手动审核每个依赖项并确保版本在所有项目和配置文件中保持一致。
幸运的是,在VS 2017中他们更容易做到这一点。您现在只需右键单击该项目,然后选择Edit <projectName>.csproj
。
Unload Project
。Edit <projectName>.csproj
。 Here is an example。从MVC 5模板创建一个新项目可能有助于查看更新项目的外观,然后比较Web.config
,Views/Web.config
和.csproj
文件之间的差异,以及然后循环遍历其余的依赖项,确保版本号一致且最新。
确保检查.csproj
文件是否正在使用MSBuild conditions,因为Visual Studio无法更新这些文件,并且在升级时它们往往是问题的主要来源。
在IIS中,我设置了一个失败的请求跟踪,并创建了包含的第一个项目; ModuleName UrlAuthorization 通知AUTHORIZE_REQUEST HttpStatus 401 HttpReason未经授权等...
该消息表明您的应用已设置为使用 UrlAuthorization ,经过进一步研究后,它似乎可以配置为IIS URL Authorization or ASP.NET URL Authorization
如果使用ASP.NET URL授权,您将拥有类似
的web.config条目<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" />
如果使用IIS URL授权,您将拥有类似
的web.config条目<add name="UrlAuthorizationModule" image="%windir%\System32\inetsrv\urlauthz.dll" />
我从VS 2017模板(带有个人用户帐户)创建了一个新的MVC 5项目,这些都不是MVC 5应用程序的典型。我不打算告诉您删除这些是解决方案,因为您的应用程序使用URL授权可能有一些正当的理由。显然,这仍然是应用程序锁定文件的最佳方式,因此无需登录就无法提供服务。但是,如果可以通过删除您正在使用的模块来证明这是根本原因,那么它只会是计算如何配置URL授权模块以使用MvcBuildViews
启用。
答案 1 :(得分:2)
删除会员代码并重新发布并没有任何区别。
因此,我创建了一个新的MVC项目,并大致将应用程序的代码迁移到其中。它仍然发布和运行编译视图!
所以我知道如何解决它,仍然不知道为什么,但软件有时也是这样。
感谢所有试图帮助esp的人。 NightOwl888。