VS 2015. Setting right target framework for ASP.NET 5 web project
我在Visual Studio 2015中创建了新的ASP.NET 5 MVC项目。在"项目创建向导"中,我选择显示.NET Framework 4.6的模板,然后在下一个屏幕上从ASP.NET 5预览模板中选择"Web应用程序"。
但是,在创建之后,在project.json的"frameworks"部分中似乎只列出了"dnx451"和"dnxcore50":
1 2 3 4
| "frameworks": {
"dnx451": { },
"dnxcore50": { }
}, |
我试着把"dnx451"改成"dnx46"。该项目已构建良好,但当我尝试运行它时,收到以下错误消息:
0
如何更改ASP.NET 5项目的"目标框架"?
以下是我的global.json:
1 2 3 4 5 6 7 8 9 10 11 12
| {
"projects": [
"src",
"test",
"wrap"
],
"sdk": {
"version":"1.0.0-beta5",
"runtime":"clr",
"architecture":"x86"
}
} |
但这里所列的并不重要。我已经尝试过不同版本的1.0.0-beta5和最新的1.0.0-beta6
- 您在global.json中有什么?如果右键单击"项目"并选择"属性",是否在那里检查了特定的框架?查看更多project.json以查看主要依赖项可能有助于诊断错误。
- 我已经更新了最初的帖子,并在其中添加了global.json的内容。不过,我已经尝试更改了这里列出的"sdk"版本,但是没有用。
- 您没有显示project.json的dependencies部分。beta6应该在昨天发布,它看起来确实在nuget feed中,但还没有发布,我认为应该有一个与之相对应的工具更新,为vs 2015。现在我会使用beta5直到更多关于beta6发布的新闻
- 依赖关系中的内容很重要,我已经看到错误发生在需要将主部分的某些依赖关系转移到dnxcore50以下的依赖关系中。
- 我也有同样的问题。将EDOCX1[0]添加到my project.json修复了这个问题。但我不知道为什么。也许它也能帮助你。
- 你有没有用这个@sergiy?我在这里看到了一个类似的问题:github.com/aspnet/dnx/issues/2365
问题是,DNX知道您的项目针对的是dnx46,但IIS不是:)。因此,IIS以.NET 4.5.1(默认情况下)启动,并尝试加载与4.5.1不兼容的项目。
在未来版本的vs工具中,我们将更好地检测到这一点,但是在那之前,对于那些希望以高于4.5.1的.NET版本为目标的Web应用程序来说,还有些困难。目前,我建议在那之前使用dnx451(如果您不依赖.NET 4.5.2/4.6功能),但如果您需要使用4.5.2或更高版本,我将在下面提供一些说明,说明如何使这项工作在今天进行。
注意:控制台应用程序和使用除IIS以外的服务器(如Kestrel或WebListener)时,完全支持dnx452和dnx46。基本上,使用本机dnx.exe引导程序可以启动的任何东西都可以与dnx451和dnx46一起使用,但其他宿主环境(IIS、IIS Express)需要额外的提示来启动正确的框架。
要使这项工作在今天进行,您需要将环境变量DNX_IIS_RUNTIME_FRAMEWORK设置为要使用的目标框架。可以在"调试"选项卡上的Web应用程序的"项目属性"页中执行此操作。只需选择IIS Express配置文件并按如下方式添加环境变量:
我们将把这个添加到已知的问题中,因为看起来我们错过了它,正如我上面所说,我们将改进vs的默认体验,所以这是不必要的:)。
- 这是我最后的决定,谢谢安德鲁!
- 谢谢你如此详细的解释。很高兴知道这不是我的错。)
- @Andrew Nurse我需要卸载Beta5才能工作吗?显然,尽管我努力使用一个特定的运行时(beta6),它仍然试图用dnx 451启动IIS。
- 今天我试图创建一个新项目,但这个错误一直在发生(beta6)。这个解决方案对我来说根本不起作用。
- 如果还没有人发现这一点——对于生产环境,除非在服务器上手动设置环境变量,否则IIS将看不到该设置。实际上,我已经在VS2015之外构建了更多的内容,并编写了一个发布的PowerShell脚本;这为我解决了这个问题,同时允许我防止管理员从我冰冷、死气沉沉的双手中抓取EF7和DI。
- 还有其他的方法吗?不为我工作
- 简单地说,我的类库目标是.NET 4.5.2,我刚刚更新的从头创建的ASP.NET 5框架项目中包含了DNX 4.5.1。由于我不依赖于4.5.2+功能,所以我将所有类库的目标设置为.NET 4.5.1-重建它们(非常重要),然后最终可以引用它们。
1
| "DNX_IIS_RUNTIME_FRAMEWORK" :"DNX46" |
该值区分大小写
- 从我所读到的dnx框架识别已经不复存在了。在阅读了这两篇文章hanselman.com/blog/………github.com/dotnet/corefx/blob/master/documentation/project-d‌&8203;ocs/…