.NET Core 依赖和框架理解
.NET Core Dependencies and Frameworks Understanding
几周以来我一直在研究 .NET Core。起初,这是从 Microsoft 到旧的 .NET 做事方式的一次重大改革。但现在它让我心烦意乱。下面是我原来的 global.json
:
{
"projects": [ "src", "test" ],
"sdk": {
"version": "1.0.0-rc1-update1",
}
}
这是我的 project.json
:
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNetCore.StaticFiles": "1.0.0-*",
"Microsoft.NETCore.Platforms": "1.0.1-*"
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
},
"frameworks": {
"dnxcore50": { }
},
"exclude": [
"node_modules"
],
"publishExclude": [
"**.user",
"**.vspscc"
]
}
这是我的 hosting.json
:
{
"webroot": "wwwroot"
}
我已经创建了一个空 ASP.NET Core 1.0 Web 应用程序项目,我想做的就是创建一个 AngularJs 应用程序。但是我无法访问 wwwroot
目录,因为我无法:
app.UseDefaultFiles();
app.UseStaticFiles();
我从原来的 project.json
中删除了 dnx451
,并将 global.json
更改为:
{
"projects": [ "src", "test" ],
"sdk": {
"version": "1.0.0-rc1-update1",
"runtime": "coreclr",
"architecture": "x64"
}
}
错误:
Error NU1002 The dependency Microsoft.AspNetCore.StaticFiles 1.0.0-rc2-20248 in project QMS.UI does not support framework DNXCore,Version=v5.0. QMS.UI ..\QMS.UI\src\QMS.UI\project.json
我看了很多博客和Whosebug的回答。谁能以非常高层次的方式告诉我我们如何:
- 有效找到适合我们目标框架的有效包。
- 有效地使所有框架(如果在 project.json 中列出)对依赖符号感到满意? (有时我会得到一个错误,它可用于
dnx451
但不能用于 dnxcore50
)(我应该使用 #if dnxcore50... 等符号吗?)
请帮忙!我在另一个基于 .NET Core 的项目中遇到了类似的麻烦。
静态文件依赖项是 RC2 格式,与您在项目其余部分使用的 RC1 不兼容。
要么使用 RC1 中的所有包,要么使用 RC2 中的所有包,但要注意 RC2 依赖关系经常中断(一个包需要 xyz 版本,而其他包尚未更新并需要旧库,但由于 API 更改不适用于较新的版本)。
这是 RC1 包
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
这是 RC2 包(你可以从它们的名字中认出它们,Microsoft.AspNet.*
包在 RC2 周期的某个时间被重命名为 Microsoft.AspNetCore.*
"Microsoft.AspNetCore.StaticFiles": "1.0.0-*",
"Microsoft.NETCore.Platforms": "1.0.1-*"
- Effectively find a valid package, that will suite our target framework.
第一步是只定位相同的版本。如果您需要稳定的环境,请在发布 RC2 之前使用 RC1。但是,请注意有很多重大变化。查看 ASP.NET Core GitHub annoucements(主要是重大更改)以获取更多信息。
- Effectively make all frameworks (if listed in the project.json) happy with that dependency notation? (Sometimes I get an error, its available for dnx451 but not dnxcore50) (Should I use the #if dnxcore50... etc notations?)
取决于您需要的程序集。有些与两个目标平台兼容 api,但大多数不兼容。通常这就是您切换平台相关 assemblies/code 的方式。
请注意,如果您使用 Class 库(包)或 .NET Core 应用程序(Webproject,单元测试项目),则会有所不同。
对于 RC1,名字对象是 dnx451
(或 dnx452
、dnx46
)用于完整的 .NET Framework 目标和 dnxcore50
用于 .NET Core。但是,对于 Class 库,您必须使用 net451
(或 net452
/net46
)来获取完整的 .NET Framework 目标和 dotnet5.x
(x=1-4 , i RC2 也 5) 用于 .NET Core。
几周以来我一直在研究 .NET Core。起初,这是从 Microsoft 到旧的 .NET 做事方式的一次重大改革。但现在它让我心烦意乱。下面是我原来的 global.json
:
{
"projects": [ "src", "test" ],
"sdk": {
"version": "1.0.0-rc1-update1",
}
}
这是我的 project.json
:
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNetCore.StaticFiles": "1.0.0-*",
"Microsoft.NETCore.Platforms": "1.0.1-*"
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
},
"frameworks": {
"dnxcore50": { }
},
"exclude": [
"node_modules"
],
"publishExclude": [
"**.user",
"**.vspscc"
]
}
这是我的 hosting.json
:
{
"webroot": "wwwroot"
}
我已经创建了一个空 ASP.NET Core 1.0 Web 应用程序项目,我想做的就是创建一个 AngularJs 应用程序。但是我无法访问 wwwroot
目录,因为我无法:
app.UseDefaultFiles();
app.UseStaticFiles();
我从原来的 project.json
中删除了 dnx451
,并将 global.json
更改为:
{
"projects": [ "src", "test" ],
"sdk": {
"version": "1.0.0-rc1-update1",
"runtime": "coreclr",
"architecture": "x64"
}
}
错误:
Error NU1002 The dependency Microsoft.AspNetCore.StaticFiles 1.0.0-rc2-20248 in project QMS.UI does not support framework DNXCore,Version=v5.0. QMS.UI ..\QMS.UI\src\QMS.UI\project.json
我看了很多博客和Whosebug的回答。谁能以非常高层次的方式告诉我我们如何:
- 有效找到适合我们目标框架的有效包。
- 有效地使所有框架(如果在 project.json 中列出)对依赖符号感到满意? (有时我会得到一个错误,它可用于
dnx451
但不能用于dnxcore50
)(我应该使用 #if dnxcore50... 等符号吗?)
请帮忙!我在另一个基于 .NET Core 的项目中遇到了类似的麻烦。
静态文件依赖项是 RC2 格式,与您在项目其余部分使用的 RC1 不兼容。
要么使用 RC1 中的所有包,要么使用 RC2 中的所有包,但要注意 RC2 依赖关系经常中断(一个包需要 xyz 版本,而其他包尚未更新并需要旧库,但由于 API 更改不适用于较新的版本)。
这是 RC1 包
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
这是 RC2 包(你可以从它们的名字中认出它们,Microsoft.AspNet.*
包在 RC2 周期的某个时间被重命名为 Microsoft.AspNetCore.*
"Microsoft.AspNetCore.StaticFiles": "1.0.0-*",
"Microsoft.NETCore.Platforms": "1.0.1-*"
- Effectively find a valid package, that will suite our target framework.
第一步是只定位相同的版本。如果您需要稳定的环境,请在发布 RC2 之前使用 RC1。但是,请注意有很多重大变化。查看 ASP.NET Core GitHub annoucements(主要是重大更改)以获取更多信息。
- Effectively make all frameworks (if listed in the project.json) happy with that dependency notation? (Sometimes I get an error, its available for dnx451 but not dnxcore50) (Should I use the #if dnxcore50... etc notations?)
取决于您需要的程序集。有些与两个目标平台兼容 api,但大多数不兼容。通常这就是您切换平台相关 assemblies/code 的方式。
请注意,如果您使用 Class 库(包)或 .NET Core 应用程序(Webproject,单元测试项目),则会有所不同。
对于 RC1,名字对象是 dnx451
(或 dnx452
、dnx46
)用于完整的 .NET Framework 目标和 dnxcore50
用于 .NET Core。但是,对于 Class 库,您必须使用 net451
(或 net452
/net46
)来获取完整的 .NET Framework 目标和 dotnet5.x
(x=1-4 , i RC2 也 5) 用于 .NET Core。