所以我有一个具有以下结构的项目:
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的程序集是最后一个转移到输出文件夹而不是P2.A,P1依赖于,但无论如何这有效的原因)。但是,如果我尝试从命令行执行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 Target以触发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目标,那么哪个可以正常工作
任何解决这个问题的指针都会非常有用。
由于
如果有帮助我使用Visual Studio 2017(15.4.1)dotnet sdk(2.0.2)
答案 0 :(得分:0)
以防其他人遇到类似的诱饵和开关问题,第二个问题(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中运行良好。