【发布时间】:2017-11-29 16:59:57
【问题描述】:
所以我有一个具有以下结构的项目:
syntax: Project (Assembly Name)
- P1 (Assembly-1)
- P2.A (Assembly-2)
- P2.B (Assembly-2)
- P3 (Assembly-3)
这样做的目的是为了方便诱饵和切换 P2.A 和 P2.B 都具有相同的程序集名称。
Proj 依赖使得 P3 是其他一切的依赖。 P1 是一个网络标准项目,它依赖于 P2.A(诱饵),并且组件按预期在各个平台上与 P2.B 交换
现在在单元测试项目中,在这个解决方案中,我不依赖于 nuget 包而是直接依赖于项目,我有一个依赖于 P1、P2.B、P3 的 UnitTest 项目。
当我在 Visual Studio 中编译它时,它按预期工作(即使这部分似乎有风险,因为 P2.B 的程序集是最后一个转移到输出文件夹而不是 P1 所依赖的 P2.A,但无论如何这是有效的原因)。但是,如果我尝试从命令行执行dotnet build,它会按照error : Cannot find project info for '**\P2.A.csproj'. This can indicate a missing project reference. 的行失败,我猜项目P2.A 和P2.B 之间的程序集名称相同,不确定如何解决这个问题。
如果我直接从 P2.B 中删除单元测试项目,它也可以从命令行正常工作,但是我们只剩下诱饵 dll。
不确定为什么该行为与 Visual Studio 和命令行不同。
我还尝试通过删除对 P2.B 的直接依赖来解决此问题,而是为 AfterTargets="Build" 设置一个 msbuild 目标以触发 P2.B 的构建并提供相应的输出路径作为单元测试项目输出文件夹。这有点适用于确实发生切换并且dotnet build/test 工作正常。但是使用指定的运行时构建然后会失败error : Assets file '**\P2.B\obj\project.assets.json' doesn't have a target for '.NETStandard,Version=v1.2/win10-x64' 如果我在构建目标 P2.B 之后删除了自定义 MSBuild 目标,那么哪个 ofc 工作正常
任何解决此问题的指针都会非常有帮助。
谢谢
如果有帮助,我正在使用 Visual Studio 2017(15.4.1) dotnet sdk (2.0.2)
【问题讨论】:
-
我创建了一个示例,但无法重现此问题,不确定我是否做错了什么。您介意与我们分享一个简单的测试样本,以便我们重现此问题吗?
-
@Judy soz 我错过了这个。我实际上已经解决了第二个问题,所以正如我在答案中提到的那样,我只是通过了这条路线。感谢您提供帮助
标签: .net msbuild .net-core visual-studio-2017