【问题标题】:NetCore command line build handling for bait and switch诱饵和切换的 NetCore 命令行构建处理
【发布时间】: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


【解决方案1】:

以防万一其他人遇到类似的诱饵和切换问题,解决了第二个问题 (custom target for after build but issue with building with a specified runtime then fails)。该错误似乎是由于缺少 Restore 目标构建触发器。

所以要让它发挥作用:

  • 我从单元测试项目的直接项目引用依赖中删除了“switch”lib(P2.B)
  • 添加了以下作为自定义目标

在net core单元测试项目.csproj中

<Target Name="BaitAndSwitchTarget" AfterTargets="Build">
  <PropertyGroup>
    <LinkedProject>..\P2.B\P2.B.csproj</LinkedProject>
  </PropertyGroup>
  <MSBuild Condition="'$(LinkedProject)' != '' " Projects="$(LinkedProject)" Targets="Restore" />
  <MSBuild Condition="'$(LinkedProject)' != '' " Projects="$(LinkedProject)" Targets="Build" Properties="OutputPath=..\$(MSBuildProjectName)\$(OutputPath)" />
</Target>

这实际上是在构建后步骤中构建切换目标并将其放置在单元测试项目的输出文件夹中,看起来 dotnet build/test/... 在 CLI 中工作得很好。

【讨论】:

  • 感谢您在这里分享您的解决方案,您可以将其标记为答案,这样可以帮助遇到相同问题的其他社区成员。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-24
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多