.NET Core RC2 applicationhost.config 与 ASP.NET .NET 4.6 不兼容?
.NET Core RC2 applicationhost.config incompatible with ASP.NET .NET 4.6?
给定包含两个网站的解决方案:
1) ASP.NET 基于 .NET 4.61
2) .NET 核心 RC2
为 (2) 启动 iisexpress 后,MSVS 更新 applicationhost.config 以包含一些似乎与 (1) 不兼容的额外行。直到 iisexpress 第一次关闭然后尝试启动 (1) 时才注意到这一点。
不兼容的行是:
<section name="aspNetCore" overrideModeDefault="Allow" />
<add name="AspNetCoreModule" image="C:\Program Files (x86)\Microsoft Web Tools\AspNetCoreModule\aspnetcore.dll" />
<add name="AspNetCoreModule" />
启动 (1) 时,会出现一个对话框,说明 "IISExpress failed to launch" 并写入一个事件:
The Module DLL 'C:\Program Files (x86)\Microsoft Web Tools\AspNetCoreModule\aspnetcore.dll' could not be loaded due to a configuration problem. The current configuration only supports loading images built for a AMD64 processor architecture. The data field contains the error number. To learn more about this issue, including how to troubleshooting this kind of processor architecture mismatch error, see http://go.microsoft.com/fwlink/?LinkId=29349.
可能的解决方案?
A) 在启动前删除了多余的行 (1),如何自动实现?
B) 每个网站使用不同的applicationhost.config,是否有环境变量来设置它?
C) 直接修复事件日志中报告的问题。它在启动 .NET Core RC2 站点时以某种方式起作用,这很奇怪。
D) 使用恰好位于不同目录中的单独解决方案文件。这是不可取的,因为它是一个相当复杂的解决方案。
根据建议 (B),这是有效的方法:
1) 在指定 "image" 的添加标签中,添加
preCondition="bitness32"
2) 如果位置块不存在,请添加一个位置块,指定删除:
<location path="Your_NonCore_SiteName">
<system.webServer>
<modules>
<remove name="AspNetCoreModule" />
</modules>
</system.webServer>
</location>
不确定为什么会这样,因为 bitness32 对我来说似乎是倒退的(因为最初的错误消息说它是 amd64)。
现在两个站点可以同时启动,MSVS 不会覆盖这些手动编辑。
使用风险自负!希望在下一个版本中有更好的答案或改进。
这应该由最新的工具(VS 2015 Update 3 和 DotNetCore.1.0.0-VS2015Tools.Preview2)修复https://www.microsoft.com/net/core#windows
AspNetCoreModule 现在有适合 IIS Express 的安装程序(包含在新工具中)。
如果您使用混合的 .NET Core RC2 和 ASP.NET < 5 个项目创建解决方案,然后升级到 .NET Core 1.0,则会发生与此类似的问题。 ASP.NET 个项目将不再 运行。
要修复,请删除 .vs\config\applicationhost.config 并卸载并重新加载 project/solution 以强制 VS 使用 . NET Core 1.0 设置,那么任何遗留的 .NET 内容都将 运行.
我还发现当您尝试在 VS 中 运行 时,事件查看器会记录 IIS Express 运行 的确切命令行,因此您可以抓住它并将其粘贴到命令中提示从 IIS Express 获取错误输出,如果事件查看器中本身没有错误,则特别有用。
给定包含两个网站的解决方案:
1) ASP.NET 基于 .NET 4.61
2) .NET 核心 RC2
为 (2) 启动 iisexpress 后,MSVS 更新 applicationhost.config 以包含一些似乎与 (1) 不兼容的额外行。直到 iisexpress 第一次关闭然后尝试启动 (1) 时才注意到这一点。
不兼容的行是:
<section name="aspNetCore" overrideModeDefault="Allow" />
<add name="AspNetCoreModule" image="C:\Program Files (x86)\Microsoft Web Tools\AspNetCoreModule\aspnetcore.dll" />
<add name="AspNetCoreModule" />
启动 (1) 时,会出现一个对话框,说明 "IISExpress failed to launch" 并写入一个事件:
The Module DLL 'C:\Program Files (x86)\Microsoft Web Tools\AspNetCoreModule\aspnetcore.dll' could not be loaded due to a configuration problem. The current configuration only supports loading images built for a AMD64 processor architecture. The data field contains the error number. To learn more about this issue, including how to troubleshooting this kind of processor architecture mismatch error, see http://go.microsoft.com/fwlink/?LinkId=29349.
可能的解决方案?
A) 在启动前删除了多余的行 (1),如何自动实现?
B) 每个网站使用不同的applicationhost.config,是否有环境变量来设置它?
C) 直接修复事件日志中报告的问题。它在启动 .NET Core RC2 站点时以某种方式起作用,这很奇怪。
D) 使用恰好位于不同目录中的单独解决方案文件。这是不可取的,因为它是一个相当复杂的解决方案。
根据建议 (B),这是有效的方法:
1) 在指定 "image" 的添加标签中,添加
preCondition="bitness32"
2) 如果位置块不存在,请添加一个位置块,指定删除:
<location path="Your_NonCore_SiteName">
<system.webServer>
<modules>
<remove name="AspNetCoreModule" />
</modules>
</system.webServer>
</location>
不确定为什么会这样,因为 bitness32 对我来说似乎是倒退的(因为最初的错误消息说它是 amd64)。
现在两个站点可以同时启动,MSVS 不会覆盖这些手动编辑。
使用风险自负!希望在下一个版本中有更好的答案或改进。
这应该由最新的工具(VS 2015 Update 3 和 DotNetCore.1.0.0-VS2015Tools.Preview2)修复https://www.microsoft.com/net/core#windows
AspNetCoreModule 现在有适合 IIS Express 的安装程序(包含在新工具中)。
如果您使用混合的 .NET Core RC2 和 ASP.NET < 5 个项目创建解决方案,然后升级到 .NET Core 1.0,则会发生与此类似的问题。 ASP.NET 个项目将不再 运行。
要修复,请删除 .vs\config\applicationhost.config 并卸载并重新加载 project/solution 以强制 VS 使用 . NET Core 1.0 设置,那么任何遗留的 .NET 内容都将 运行.
我还发现当您尝试在 VS 中 运行 时,事件查看器会记录 IIS Express 运行 的确切命令行,因此您可以抓住它并将其粘贴到命令中提示从 IIS Express 获取错误输出,如果事件查看器中本身没有错误,则特别有用。