无法将netstandard1.6项目导入netcore1.0 app

时间:2016-11-29 08:34:52

标签: .net asp.net-core .net-core

我已经创建了一个全新的Asp.Net Core WebApi应用程序和一个.NET核心库,我打算在该应用程序中引用它。

  • 该应用程序是netcoreapp1.0
  • 图书馆是netstandard1.6
  • dotnet --version是1.0.0-preview2-1-003177

我在应用程序中引用了库,但似乎应用程序无法解析该库中的任何内容。

  • 任何人都可以向我解释这有什么问题吗?我认为它应该开箱即用?
  • 任何人都可以解释为了让这个跨平台运行我需要做什么? ex win10和ubuntu?

web api app

{
  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0",
      "type": "platform"
    },
    "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": {
    "netcoreapp1.0": {
      "imports": [
        "dnxcore50"
        //"dotnet5.6",
        //"portable-net45+win8"
      ],
      "dependencies": {
        "PoC.ServiceDiscovery": {
          "version": "1.0.0-*",
          "target": "project"
        }
      }
    }
  },

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

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

  "runtimes": {
    "win10-x64" :  {} ,
    "ubuntu.16.04-x64":  {} 
  },

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

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

文库

{
  "version": "1.0.0-*",
  "dependencies": {
    "NETStandard.Library": "1.6.0",
    "Microsoft.Extensions.DependencyInjection": "1.0.0"
  },
  "frameworks": {
    "netstandard1.6": {
      "imports": "dnxcore50"
    }
  },
  "runtimes": {
    "win10-x64": {},
    "ubuntu.16.04-x64": {}
  }
}

此致

3 个答案:

答案 0 :(得分:1)

(1)从库的project.json中删除runtimes。您的库正在定义一组它使用的API(.NET Standard 1.6 API)。所使用的API的实现由运行时选择,该运行时依赖于您的库。它可能适用于列出的它们,但它对.NET标准库没有任何意义。

(2)你的图书馆缺少一个名字。为其命名,以便您可以在WebAPI project.json中引用它。为了清楚起见,我将假设它将被称为PoC.ServiceDiscovery

(3)将PoC.ServiceDiscovery(假设这是您的图书馆名称)放入WebAPI的dependencies文件中project.json的正常列表中,紧挨着Microsoft.*

(4)您需要向WebAPI项目提供有关查找此库的位置的知识。这有两种主要方式。一种方法是使用包管理器(如NuGet或MyGet(需要更新NuGet.config文件))共享库,或者我认为您希望在您的方案中执行本地项目引用。在这种情况下,在根目录中添加一个global.json文件,其中包含包含库和WebAPI项目的相对路径数组,并使WebAPI项目中的依赖项成为项目引用。这意味着它看起来像这样:"PoC.ServiceDiscovery": { "target": "project" }

如果您想看一个示例,here is a very simple library我写了uses .NET Standard for the libraryproject reference用于图书馆的测试项目,global.json file允许dotnet命令行工具,用于了解运行测试时查找库的位置。

答案 1 :(得分:0)

首先,不再分离ASP.NET WebApi,因为它现在是ASP.NET MVC的一部分

但支持主题 - .NET Standard只是更高级别的API摘要。支持.NET Core 1.0并不意味着运行跨平台(因为它也支持.NET Framework,通用Windows平台等)。所以你有两种方法可以在库中使用:

  • 删除netstandard1.6并替换netcoreapp1.0
  • 删除运行时

有关详细信息,请参阅阅读https://github.com/dotnet/standard/blob/master/docs/versions.md

答案 2 :(得分:0)

 <ItemGroup>
    <ProjectReference Include="..\YourProjectName\YourProjectName.csproj" />
  </ItemGroup>

到目标.csproj项目。