因此,我有一个具有以下结构的项目:
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包,而是直接依赖于项目,我有一个UnitTest项目依赖于P1、P2.B、P3。
当我在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就会正常工作。
任何能解决这个问题的指针都会很有帮助。
谢谢
如果有帮助的话,我正在使用VisualStudio2017(15.4.1) dotnet (2.0.2)
发布于 2017-12-01 14:55:03
为了防止其他人遇到类似的诱饵和切换问题,第二个问题(custom target for after build but issue with building with a specified runtime then fails)得到了解决。这个错误似乎是因为缺少一个Restore目标构建触发器。
因此,为了使它发挥作用:
网络核心单元测试项目.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中运行得很好。
https://stackoverflow.com/questions/47557975
复制相似问题