【问题标题】:.NET Core Reference Type project not working.NET Core 参考类型项目不工作
【发布时间】:2017-02-22 22:58:26
【问题描述】:

我在使用项目参考和 .NET Core 时遇到问题。

我在 src 文件夹中有一个库(MyLib),在测试文件夹中有两个项目(MyLib.TestsMyLib.Tests.Support

总结:

|-- global.json
|-- src
|   \-- MyLib
\-- test
    |-- MyLib.Tests
    \-- MyLib.Tests.Support

MyLib 已通过 NuGet 提供,测试项目不提供(也不会提供)。

当我在MyLib.Tests 中引用(使用right click > add reference 选项)MyLibTest.Support 时,dotnet-restore 工作正常。在 Visual Studio 中,在“参考”下,我有一个小图标,表明它是一个项目参考。当我在MyLib.Tests 中引用(仍然使用right click > add reference 选项)MyLib 时,dotnet-restore 也可以正常工作,但我有一个小图标表示它是一个 nuget 引用。

这是预期的行为,但我不希望我的测试项目测试“旧”NuGet 包,而是测试实际代码。

根据我在互联网上找到的文档和大量教程,然后在MyLib.Tests\project.json 中配置MyLib 依赖项作为项目依赖项:

{
  "dependencies": {
      "NETStandard.Library": "1.6.0",
      "SimpleDao": {
        "target": "project"
        "version": "2.0.0-*"
      },
      "MyLib.Tests.Support": "1.0.0-*"
  }
}

但是,dotnet-restore 失败了:

  1. Visual Studio 错误:NU1001 The dependency MyLib could not be resolved.
  2. 控制台错误:Unable to resolve 'MyLib' for '.NETStandard,Version=v1.6'

这是我的 global.json:

{
  "projects": [ "src", "test" ],
  "sdk": {
    "version": "1.0.0-preview2-003131"
  }
}

问我其他任何可能与解释我的麻烦有关的事情

提前致谢。 (对不起,我的英语不是母语)


编辑:

我意识到我的库也有问题:实际上MyLib 由三个库组成:

  1. MyLib,主要是接口,针对.netstandard1.1
  2. MyLib.Impl1,第一个实现,目标是 .net451.netstandard1.3(还没有在 NuGet 上)
  3. MyLib.Impl2,第二个实现,针对.net45(NuGet 上已经有它的第一个版本)

始终使用相同的方法添加参考 (right click > add reference)。 我没有编辑 project.json 文件(两者都添加了这样的引用:“MyLib”:“2.0.0-*”)。

在第一个实现中,Visual Studio 通过 NuGet 获取依赖项(引用选项卡中有 NuGet 图标)。而且我没有 MyLib 接口的最新编辑。

在第二个实现中,Visual Studio 获取项目中的依赖项(引用选项卡中有项目图标),并且我确实对接口进行了最新的编辑。

如果我尝试编辑 project.json 以将对 MyLib 的依赖项配置为项目依赖项,我也无法恢复包,与测试相同的错误...

这是 .NET Core 中的错误(我正在尝试使用 Visual Studio 和 dotnet-cli 进行恢复)还是我做错了什么?

编辑 3: 我在 NuGet 上发布了 MyLibMyLib.Impl2 的预发布版本。我删除了那些版本并回到我的解决方案。现在,MyLib.Impl1MyLib.Impl2 正确定位了我的项目参考(对于MyLib.Impl1,我必须在project.json 中指定目标,而不是MyLib.Impl2。我不知道为什么,但至少现在可以使用-_-)。

但我仍然无法修复我的测试项目。它仍然不想使用项目参考...


编辑 2:

Here 是我的 github 存储库,您可以在其中找到我的整个代码(在迁移分支中)。

【问题讨论】:

  • 如果删除"version": "2.0.0-*" 行并只留下"target": "project" 会发生什么?
  • 是一样的。在控制台行中,错误是:Unable to resolve 'MyLib' for '.NETStandard,Version=v1.6'(我将编辑我的初始帖子以添加此内容)。事实上,MyLib 的目标是 netstandard1.1(为了与 .NET 4.5 兼容),但这应该不是问题。用 netstandard1.1 编写的所有内容都与新版本兼容...
  • 即使我将MyLib.Tests 更改为目标netstandard1.1,我也会遇到同样的错误。
  • 我在 lib 架构中发现了其他同类问题……我刚刚用新发现编辑了我的帖子!
  • 您的意思是您已将 MyLib 打包为 NuGet 包?请解释“MyLib 已经可以通过 NuGet 获得”是什么意思?如果可能,请在此处分享示例解决方案,以帮助我们重现您的问题。

标签: c# visual-studio-2015 nuget .net-core


【解决方案1】:

嗯,这是一个艰难的过程......

我将我的 lib 从完整的 .NET 移植到 .NET Core,在此过程中,我错误地命名了一个项目(大写/小写问题)。我用正确的大小写重命名了它,但我没有更改 .sln 中的任何内容。

当我将此项目作为引用添加到另一个项目中时,Visual Studio 使用的是 .sln 中未更改的 olg 名称,而不是当前名称。

当出现这样的案例问题时,在 NuGet 上查找参考似乎比在本地项目上更容易...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2017-11-07
    • 2016-08-04
    相关资源
    最近更新 更多