使用完整的 .NET 部署 ASP.NET



我想知道如果我也使用 .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 builddotnet publish。看到任何错误?

因此,当你需要不适用于 .NET Core 的包/类时,无法在.NET Core下创建/生成/运行。

可能的解决方案:

  • 将软件包替换为与netcore兼容的软件包(如果有的话,我不知道),或者重建(端口)现有的兼容(如Joel所说);
  • 完全删除此包(自己实现所需的代码);
  • 不要以netcoreapp1.1为目标;
  • 在使用此包的位置添加条件编译 (#if),以便仅在net462版本的应用程序中使用 否则(#else) 添加 NotImplementException、null result 或其他内容(视情况而定) - 实际上,编译后您将拥有两个不同的应用程序:net462的全功能netcoreapp的限制功能。

最新更新