如何在Visual Studio 2015中引用netstandard1.5库项目并修复智能感知问题?

3
我有四个库项目,它们都针对netstandard1.5框架。其中一些依赖于其他项目,在这四个项目中,智能感知都工作正常。
我正在尝试在我的ASP.NET netcoreapp1.0项目中使用这些库。但是当我以netcoreapp1.0框架为目标时,类型无法找到(在Visual Studio中以红色显示)。然而,该项目编译和运行都成功。
一旦我在我的Web API中切换到netstandard1.5框架,库的类型就被识别并且可以获得智能感知。
有什么好的想法来解决这个问题或者我做错了什么?
以下是其中一个库项目的project.json文件(它们几乎相同):
{
  "version": "1.0.0-*",

  "frameworks": {
    "netstandard1.5": {
      "imports": [ "dnxcore50", "portable-net45+win8" ],
      "dependencies": {
        "NETStandard.Library": "1.5.0-rc2-24027",

        "System.Security.Principal": "4.0.1-rc2-24027"
      }
    }
  },
  "dependencies": {
    "Microsoft.AspNetCore.Identity": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore": "1.0.0-rc2-final",
    "HoehenSucht.Models": "1.0.0-*",
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1-rc2-24027"
  }
}

这是 API 的 project.json 文件:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "HoehenSucht.Framework": "1.0.0-*",
    "HoehenSucht.Models": "1.0.0-*",
    "HoehenSucht.Repositories": "1.0.0-*",
    "HoehenSucht.Services": "1.0.0-*",
    "HoehenSucht.Authentication": "1.0.0-*",
    "Microsoft.ApplicationInsights.AspNetCore": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final",
    "Autofac.Extensions.DependencyInjection": "4.0.0-rc2-240",
    "AutoMapper": "4.2.1",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final",
    "System.Security.Principal": "4.0.1-rc2-24027",
    "System.Reflection": "4.1.0-rc2-24027",
    "IdentityServer4.AccessTokenValidation": "1.0.0-beta6",
    "Microsoft.AspNetCore.Authorization": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Hosting": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview1-final",
    "Autofac": "4.0.0-rc2-240",
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0-rc2-final",
    "HoehenSucht.API.Models": "1.0.0-*",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
    "System.Linq": "4.1.0-rc2-24027",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
    "System.Linq.Parallel": "4.0.1-rc2-24027",
  },
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0-*"
        },
        "System.Collections": "4.0.11-rc2-24027",
      },
      "imports": [ "dnxcore50", "portable-net45+win8" ]
    }
  },
  "tools": {
    "Microsoft.EntityFrameworkCore.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": [
        "portable-net45+win8+dnxcore50",
        "portable-net45+win8"
      ]
    }
  }
}

你在更改框架后是否已恢复软件包? - svick
我不知道要重复多少次,但是不要混合使用RC1和RC2软件包!!! "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final" - Tseng
我移除了该程序包,但仍然出现相同的“错误”。之后也进行了一次清理重建。 同时在解决方案根目录和项目根目录执行了 dotnet restore - Silthus
啊...我找到了答案。是Resharper的问题。Resharper似乎还不支持.net core - Silthus
1个回答

4

这里的问题在于ReSharper,而不是Visual Studio。

http://blog.jetbrains.com/dotnet/2016/05/27/resharper-ultimate-2016-2-eap-kicks-off/

初步支持ASP.NET Core 1.0 RC2,包括对标记辅助程序的代码完成、导航、搜索和重构方面的支持。目前,如果ASP.NET Core Web应用程序针对.NET Framework,则受支持,但如果针对.NET Core,则不受支持。我们将在随后的构建中改进此功能。

因此,如果您的库针对.netstandard1.5,Resharper将无法正确显示智能提示信息,但项目将编译。

但是,如果将.netcoreapp1.0框架添加为project.json文件的附加框架,则Resharper将工作,并且您将获得完整的智能提示支持。

 frameworks": {
    "netstandard1.5": {
      "imports": [ "dnxcore50", "portable-net45+win8" ],
      "dependencies": {
        "NETStandard.Library": "1.5.0-rc2-24027",

        "System.Security.Principal": "4.0.1-rc2-24027"
      }
    },
    ".netcoreapp1.0": {
      "imports": [ "dnxcore50", "portable-net45+win8" ]
    }
 },

奇怪的是,这也适用于使用netstandard2.0库的VS 2017预览版。在netstandard2.0库的csproj中添加第二个目标框架(coreapp)后,Resharper会正确显示所有依赖项/智能感知。<TargetFramework>netcoreapp2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework> - Algirdas

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