.NETCore和.NET4.5.2都使用的公共类库

.NETCore和.NET4.5.2都使用的公共类库,.net,portable-class-library,.net-core,.net,Portable Class Library,.net Core,我对.Net Core相当陌生,但已经创建了一个可运行的Asp.Net Core WebAPI站点-现在我想与另一个项目共享一些代码 我安装了Visual Studio 2015和更新3 我已从安装了DotNetCore.1.0.0-VS2015Tools.Preview2.exe 我想创建一个可以被其他两个库使用的共享库(PCL)——它只包含基本类/接口,没有其他依赖项。其中一个消费库是一个新的香草项目,目标是“netstandard1.6”,另一个是一个旧的客户端库,目标是.NET4.5

我对.Net Core相当陌生,但已经创建了一个可运行的Asp.Net Core WebAPI站点-现在我想与另一个项目共享一些代码

  • 我安装了Visual Studio 2015和更新3
  • 我已从安装了DotNetCore.1.0.0-VS2015Tools.Preview2.exe
我想创建一个可以被其他两个库使用的共享库(PCL)——它只包含基本类/接口,没有其他依赖项。其中一个消费库是一个新的香草项目,目标是“netstandard1.6”,另一个是一个旧的客户端库,目标是.NET4.5.2(如果必须的话,我可以将其升级到4.6.x)

我一直在兜圈子,我不能让netstandard1.6库引用PCL-我只是被告知缺少类型:

错误CS0246:找不到类型或命名空间名称“SomeTypeHere”(是否缺少using指令或程序集引用?)

名为“ClassLibrary1”的PCL的project.json自动生成为:

{
  "supports": {},
  "dependencies": {
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1",
    "NETStandard.Library": "1.6.0"
  },
  "frameworks": {
    "netstandard1.1": {}
  }
}
My consuming library project.json是:

{
  "version": "1.0.0-*",
  "dependencies": {
    "NETStandard.Library": "1.6.0",
    "Newtonsoft.Json": "9.0.1"
  },
  "frameworks": {
    "netstandard1.6": {
      "dependencies": {
        "ClassLibrary1": {
          "target": "project"
        }
      }
    }
  }
}  
我怎样才能做到这一点

2016年7月7日编辑:

我提供了以下解决方案,演示了我的设置:
请参阅ExperimentClient::GetLocationAsync,了解我希望在.Net 4.5.2/4.6.x客户端中使用合同库的位置。

以下是我创建共享库的方法,这些共享库可以从.Net核心项目和.Net 4.5项目中使用:

SharedLibrary\project.json

"dependencies": { },
"frameworks": {
  "net45": { },
  "netstandard1.1": {
    "dependencies": {
      "NETStandard.Library": "1.6.0"
    }
  }
},
"version": "1.0.0"
同一解决方案中的消费(.NET Core)库引用它的方式如下:

"dependencies": {
  "SharedLibrary": {
    "target": "project",
    "version": "1.0.0"
  }
},
"frameworks": {
  "netstandard1.1": { }
  }
}
一个使用
project.json
的.NET4.5项目除了框架部分中的
net45
之外看起来是一样的。如果生成了用于SharedLibrary的NuGet包,那么在基于csproj的.NET4.5项目中安装也会起作用


根据netstandard1.1的定义,只需将共享库定位在.NET4.5+项目中就可以了。我在这方面遇到了一些奇怪的问题,但这可能是beta工具的结果。

我找到的唯一可行的方法是破解客户端库的.csproj文件:


假的
..\JE.Api.experience.Contract\bin\$(配置)\net452\JE.Api.experience.Contract.dll

通过硬编码从合同库到正确输出文件夹的路径,一切正常


。。。认为这可能是visual studio中的一个bug。

仅供参考-随着.NET Core的出现,它们不再被称为PCL:)谢谢我的“netstandard端”现在正在运行,但在从.NET4.5.2客户端引用共享项目时仍然存在问题。{“dependencies”:{},“frameworks”:{“net452”:{},“version”:“1.0.0”}我在VisualStudio中引用了该项目(两个库在同一个解决方案中),我得到了“error CS0234”。但是,共享库生成了一个.Net 4.5.2 dll。奇怪的是,如果我直接引用它,一切都正常。当引用项目而不是DLL时,属性窗口中的hintpath是正确的:\ClientLib\bin\Debug\net452\SharedLib.DLL都非常奇怪。。。M$怎么会把这些东西弄得这么复杂。Net过去很简单:-(@JonRea:澄清一下-您是从基于
project.json
还是基于
csproj
的.Net 4.5.2项目引用共享项目?“您是从.Net 4.5.2项目引用共享项目”-是…“基于project.json还是基于csproj”--这取决于我选择的VS模板。我尝试了xproj和csproj,它们都有一个project.json。我编辑了这个问题,添加了一个示例解决方案。