我想知道如果我也使用 .NET 4.5.2 中的一些库,是否可以部署我的 asp.net 核心应用程序。
为了描述我的问题,在我的应用程序中,我使用来自完整.NET的SyndicationFeed。 在我的项目.json的"框架"部分中,我有:
"frameworks": {
"net452": {
"frameworkAssemblies": {
"System.ServiceModel": ""
},
"dependencies": {
}
},
"netcoreapp1.1": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.1.0"
}
},
"imports": [
"dotnet5.6",
"portable-net45+win8"
]
}
}
在其他部分中,我使用 ASP。核心包,如:
"Microsoft.EntityFrameworkCore.Design": "1.1.0",
"Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final",
"Hangfire.AspNetCore": "1.6.8",
等等。
所以问题是是否可以部署到 IIS。我应该部署到使用 ASP 运行的服务器吗?核心或完整的 .NET。
简而言之:是的,这是可能的。但是需要完整的.NET Framework(在服务器上)。
说来话长:
在编译/发布过程中,projects.json
有两个frameworks
可以有效地创建两个不同的应用程序(一个用于net462
,另一个用于netcoreapp1.1
)。这是两个不同的应用程序,从相同的源代码为不同的框架编译。
要首先运行(对于net462),您需要安装了.NET Framework的计算机。对于其他(对于netcoreapp),您需要安装.NET Core。您不能"交换"(在.NET Core
上运行net462
构建应用程序,反之亦然)。
但是看着你的project.json
我不敢相信你的应用程序编译成功。你需要System.ServiceModel
才能使应用正常工作。但它仅适用于 net462。这意味着在编译期间,第一个应用程序(对于 net462)编译成功,而第二个应用程序(net netcoreapp)应该失败(找不到类、找不到命名空间等)。
从项目/解决方案文件夹中的命令行运行dotnet build
或dotnet publish
。看到任何错误?
因此,当你需要不适用于 .NET Core 的包/类时,无法在.NET Core
下创建/生成/运行。
可能的解决方案:
- 将软件包替换为与netcore兼容的软件包(如果有的话,我不知道),或者重建(端口)现有的兼容(如Joel所说);
- 完全删除此包(自己实现所需的代码);
- 不要以
netcoreapp1.1
为目标; - 在使用此包的位置添加条件编译 (
#if
),以便仅在net462
版本的应用程序中使用 否则(#else
) 添加 NotImplementException、null result 或其他内容(视情况而定) - 实际上,编译后您将拥有两个不同的应用程序:net462
的全功能netcoreapp
的限制功能。