如何在 .NET Core 类库中引用 Visual Studio 共享项目

Posted

技术标签:

【中文标题】如何在 .NET Core 类库中引用 Visual Studio 共享项目【英文标题】:How do I reference a Visual Studio Shared Project in a .NET Core Class Library 【发布时间】:2016-11-26 04:20:39 【问题描述】:

我创建了许多共享项目,并且正在测试这些项目是否可以按照我的希望和期望在所有不同的项目类型之间共享。到目前为止,我已经管理了所有这些(有时需要一些解决方法),但我还不能弄清楚如何使用 .NET Core 类库来做到这一点,这将非常有用。

由于我似乎无法通过 Visual Studio 2015 做到这一点,有没有人知道如何做到这一点?也许通过将引用直接输入到类库的 project.json 文件中?

编辑:从 Visual Studio 2017 RC 开始,共享项目可以与 .NET Core 项目一起正常工作。

【问题讨论】:

【参考方案1】:

从 Visual Studio 2017 RC 开始,共享项目也可以在 .NET Core 平台上正常工作。

【讨论】:

我想这取决于一个人对“正确”的定义。我有一个包含单元测试的共享项目和两个测试项目,一个 .NETCoreApp1.0 和一个 .NET Framework 4.6.2,它们都引用了共享项目。共享测试仅在 .NET Framework 中可见。 .NETCoreApp1.1 也是如此。 我总是将我的共享项目捆绑在一个 dll 中,例如 .NET Core 1.1 类库或 .NET Framework 类库。然后我将该 dll 引用到我的测试项目中。考虑到测试本身往往依赖于特定版本的库,我还没有尝试在两个库之间实际共享测试。无论如何,希望您使用内置报告工具向 Microsoft 报告您的发现 - 他们刚刚修复了我之前报告的最新版本中的一个问题,您无法使用 Visual Studio 删除共享项目引用(必须这样做所以在项目文件中)【参考方案2】:

这似乎是不可能的 - 我今天一直在尝试找出如何做到这一点!我发现的最好的来自这个 SO 问题:

How can I use xproj (asp.net/dotnet core project) with shproj (shared project)?

我从中得到的好处是,我可以创建可以由 NET45/46 类库直接引用但必须使用基于 project.json 的解决方法将其拉入 .NET Core 项目的共享项目,通过添加以下“buildOptions”-

"buildOptions": 
  "compile": 
    "include": [
      "../../TesterShared/**/*.cs"
    ]
  

在上面的示例中,我的共享项目称为“TesterShared”,Visual Studio 在解决方案的根目录中创建了该项目 - 与它在“src”文件夹中创建的 .NET Core 项目不同(因此双“../”父路径导航)。

【讨论】:

如果可行,那我暂时可以接受!然后希望下一次 Visual Studio 更新能解决这个问题。 我也希望如此!由于 project.json 显然被替换为不同类型的 .csproj 文件,也许他们会这样做。我一直在使用这种方法,所以我知道它可以正常工作,但有一些限制。我想在共享项目中包含一个“.sqlite”数据库文件并且遇到了问题(有“copyToOutput”选项几乎可以达到我想要的,但不完全)。此外,如果您在共享项目中编辑文件,则需要强制重新构建 .NET Core 项目 - 它不会意识到对共享项目的更改需要重新构建。 啊,这些确实是一些令人讨厌的限制。所以基本上 Visual Studio 并不真正知道共享项目已链接,但至少会编译它。至于 SQLLite 的事情,我认为那些主要是特定于客户端的。我努力在我的共享项目中实现零依赖,并让它们为可以注入构造函数的所有外部事物定义接口。我会接受你的回答,再次感谢。 @Arwin 作为答案添加的信息现在更好了——VS2017 的最终版本支持共享项目,并且运行良好;来自 .NET Framework 项目和 .NET Core 项目的引用运行良好。

以上是关于如何在 .NET Core 类库中引用 Visual Studio 共享项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在标准类库中读取 .Net Core 配置?

如何在 .NET Core 类库中使用 System.Windows.Forms

ASP.NET Core 类库中取读配置文件 appsettings.json

.Net Core在类库中使用当前HttpContext

Asp.Net 5 类库中未引用 Mscorlib

如何在单独的类库.net core 中使用 DbContext?