如何在ASP.NET Core MVC Web应用程序(RC2)中引用完整框架库项目?

10
我目前正在使用ASP.NET Core MVC RC2,它应该支持从Core MVC Web应用程序项目引用完整框架库项目。但是我似乎无法使其正常工作。
我有一个现有的完整框架库项目,我想将其与新的Core MVC Web应用程序项目一起使用。但是,当我尝试向库的项目添加引用时,会出现错误,指出其目标框架与Web应用程序的目标框架不兼容。
为了简化问题,我创建了一个新的Core MVC Web应用程序和一个新的Windows Code Library,并尝试从Web应用程序项目向库的项目添加引用,但收到相同的错误消息。我在Stack Overflow上搜索了一下,发现了这个问题How to make ASP.NET Core RC2 app build on net46 framework with older third party dependencies,看起来非常相关,但我无法使用那里的信息解决我的问题。
以下是重现此问题的步骤: 我创建了一个解决方案,其中包含一个基于Visual Studio 2015中的“Web应用程序”模板的“.NET Core”“ASP.NET Core Web应用程序”项目。

[pic 1

[pic 2

我随后向解决方案中添加了一个新的“Windows”“类库”项目。

enter image description here

所以现在解决方案看起来像这样:

pic 4

现在,当我尝试使用Visual Studio将Core MVC Web应用程序与Full Framework库进行引用时,出现了一个错误,指出“ExampleLib具有与当前项目ExampleWebApplication不兼容的目标框架。”:

enter image description here

这个错误看起来很容易理解,似乎要求我更改Web应用程序所针对的框架,使其与库相同,这很合理。问题是我找不到如何做到这一点的文档,而智能感知也没有提供特别有帮助的信息。
我猜想我需要更改Web应用程序的project.json文件中以下其中一个部分:
"dependencies": {
    "Microsoft.NETCore.App": {
     "version": "1.0.0-rc2-3002702",
     "type": "platform"
   },

或者

 "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "dnxcore50",
        "portable-net45+win8"
      ]
    }
  },

我该如何在Core MVC Web应用程序中指定.NET Framework 4.6版本,而不是.NET Core App?
2个回答

5

有一个模板可以让您针对完整的.NET框架进行定位 - 抱歉,现在无法发布图片,但您可以转到:

模板 -> Visual C# -> Web -> ASP.NET Core Web应用程序(.NET Framework)

请注意,您可以从上面的下拉菜单中指定.NET Framework的版本(与往常一样)。

这将更改您的project.json为:

"frameworks": {
"net461": { }
}

(根据您选择的框架版本)现在,您将能够向您的类库添加引用。

"frameworks": {
    "net461": {
    "dependencies": {
    "ClassLibrary1": {
        "target": "project"
        }
     }
   }
}

我已经在这个帖子https://github.com/aspnet/Tooling/issues/45中与微软的abpiskunov一起探讨了一种方法,但如果我能让它工作,我更喜欢你的方法。当我在新项目对话框的下拉列表中选择“.NET Framework 4.5.1”并选择ASP.NET Core Web App时,project.json似乎会忽略它,并包含“frameworks”:{     "netcoreapp1.0":{       "imports":[         "dotnet5.6",         "dnxcore50",         "portable-net45 + win8"       ]     }  }, - RonC
1
但是,如果我手动编辑project.json文件中的frameworks部分以包括"net461",并且从文件顶部的dependencies部分中删除"Microsoft.NETCore.App",然后手动还原软件包,再使用Visual Studio添加我的项目引用,然后再手动还原软件包,我就可以让它工作了。理论上来说,最后一次手动还原软件包是不必要的,但在我的设置中,出于某种仍不清楚的原因,它是必需的。 - RonC
再提醒一点,对我而言,使用这种方法引用Windows类库项目只有在该项目是使用我的Visual Studio 2015 Update 2和RC2工具创建的情况下才有效,对于几年前创建的Windows类库项目无效。解决方法是?创建一个新的Windows类库项目,将现有的代码文件添加到其中,现在VS将允许使用上面答案中和我的评论中的步骤引用它。干杯! - RonC
1
我成功创建了一个针对.NET 4.5.1的测试应用程序。您确定在创建应用程序时选择了正确的模板吗?它应该是“ASP.NET Core Web Application (.NET Framework)”,而不是“ASP.NET Core Web Application (.NET Core)”。至于添加类库引用:使用简单名称添加类库似乎可以正常工作(例如ClassLibrary1)。但是,我在使用csproj和程序集名称更复杂且不匹配的类库时遇到了一些问题,例如“A.B.csproj”和“Company.Product.A.B.dll”。 - JC1001
这是一个非常好的观点。我使用“ASP.NET Core Web Application (.NET Core)”模板创建了我的Web应用程序,但没有意识到其他模板的存在,因为我在“.NET Core”模板下找到了我的模板。现在我看到,在Visual Studio的“Web”模板下,“ASP.NET Core Web Application (.NET Framework)”模板将是一个更好的选择,并且可以避免手动编辑project.json文件。对于需要链接到Windows类库的新Web应用程序,这是正确的方法。太棒了! - RonC

1

按照Ron C的步骤,这是我刚测试过并且成功的Web API项目的完整project.json。

{
  "dependencies": {
    "Microsoft.AspNetCore.Mvc": "1.0.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0"
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
  },

  "frameworks": {
    "net461": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ],
      "frameworkAssemblies": {
        "System.Data": "4.0.0.0"
      }
    }
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "Areas/**/Views",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接