MsBuild SDK 项目风格:项目依赖有时会失败
MsBuild SDK project style: project dependencies sometimes fails
在解决方案中,我将一些依赖项目配置为 SDK 样式项目:
- Proj A 作为MsBuild 任务负责做一些例程
- 为了正确编译需要这样处理的Proj B工程
- 任务在项目 B 中配置为具有属性 BeforeTargets="CoreCompile".
的 MsBuild 目标
基于 Proj A 应该在 运行Proj B 编译任务之前完全编译。
这两个项目都有不同的编译目标(NetStandard20 和 Net462)。因此,我无法直接引用,而是通过将 属性 AddSyntheticProjectReferencesForSolutionDependencies 设置为 false 来实现解决方案范围的项目依赖(否则 msbuild 会尝试强制执行项目依赖)。
在该设置中,MsBuild 有时会在编译时失败:Proj A 开始编译但在 Proj B 运行 任务时未及时完成。
MSBuild 在 CI 机器上启动,密钥为 /m。
欢迎任何想法。
在这种情况下,您实际上确实需要一个综合项目引用,但目前 MSBuild 中存在一个微妙的问题,如果具有依赖项的项目是多目标的,则会在项目引用之间产生一些问题。这是fixed in 15.9.
请在 15.9 的 visual studio 预览版中试用(撰写本文时:15.9 预览版 2)。
如果不想等,可以自己在csproj文件中添加类似的项目引用:
<ItemGroup>
<ProjectReference Include="..\other\project.csproj"
ReferenceOutputAssembly="false"
LinkLibraryDependencies="false"
CopyLocal="false"
SkipGetTargetFrameworkProperties="true"
GlobalPropertiesToRemove="TargetFramework"
/>
</ItemGroup>
在解决方案中,我将一些依赖项目配置为 SDK 样式项目:
- Proj A 作为MsBuild 任务负责做一些例程
- 为了正确编译需要这样处理的Proj B工程
- 任务在项目 B 中配置为具有属性 BeforeTargets="CoreCompile". 的 MsBuild 目标
基于 Proj A 应该在 运行Proj B 编译任务之前完全编译。 这两个项目都有不同的编译目标(NetStandard20 和 Net462)。因此,我无法直接引用,而是通过将 属性 AddSyntheticProjectReferencesForSolutionDependencies 设置为 false 来实现解决方案范围的项目依赖(否则 msbuild 会尝试强制执行项目依赖)。
在该设置中,MsBuild 有时会在编译时失败:Proj A 开始编译但在 Proj B 运行 任务时未及时完成。 MSBuild 在 CI 机器上启动,密钥为 /m。
欢迎任何想法。
在这种情况下,您实际上确实需要一个综合项目引用,但目前 MSBuild 中存在一个微妙的问题,如果具有依赖项的项目是多目标的,则会在项目引用之间产生一些问题。这是fixed in 15.9.
请在 15.9 的 visual studio 预览版中试用(撰写本文时:15.9 预览版 2)。
如果不想等,可以自己在csproj文件中添加类似的项目引用:
<ItemGroup>
<ProjectReference Include="..\other\project.csproj"
ReferenceOutputAssembly="false"
LinkLibraryDependencies="false"
CopyLocal="false"
SkipGetTargetFrameworkProperties="true"
GlobalPropertiesToRemove="TargetFramework"
/>
</ItemGroup>