【发布时间】:2017-02-22 22:58:26
【问题描述】:
我在使用项目参考和 .NET Core 时遇到问题。
我在 src 文件夹中有一个库(MyLib),在测试文件夹中有两个项目(MyLib.Tests 和 MyLib.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 失败了:
- Visual Studio 错误:
NU1001 The dependency MyLib could not be resolved. - 控制台错误:
Unable to resolve 'MyLib' for '.NETStandard,Version=v1.6'
这是我的 global.json:
{
"projects": [ "src", "test" ],
"sdk": {
"version": "1.0.0-preview2-003131"
}
}
问我其他任何可能与解释我的麻烦有关的事情
提前致谢。 (对不起,我的英语不是母语)
编辑:
我意识到我的库也有问题:实际上MyLib 由三个库组成:
-
MyLib,主要是接口,针对.netstandard1.1 -
MyLib.Impl1,第一个实现,目标是.net451和.netstandard1.3(还没有在 NuGet 上) -
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 上发布了 MyLib 和 MyLib.Impl2 的预发布版本。我删除了那些版本并回到我的解决方案。现在,MyLib.Impl1 和MyLib.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