为何csproj中定义的MSBuild属性无法作用于项目依赖的还原与构建?
问题原因
MSBuild 中,项目内定义的属性默认是当前项目的本地属性,不会自动传递给被引用的依赖项目。你在命令行通过/p:Net48=True传入的是全局属性,会应用到本次构建涉及的所有项目(包括被 B 引用的 C 项目),所以能正常生效;而你直接写在 B.csproj 里的<Net48>True</Net48>只有 B 自己能读取,C 项目构建时拿不到这个属性值,就会默认走 net5.0 的配置,和 B 的 net48 目标框架不兼容导致构建失败。
解决方法
你需要在ProjectReference节点上配置Properties元数据,手动把 B 的 Net48 属性传递给引用的 C 项目,修改 B.csproj 的 ProjectReference 部分即可:
<ProjectReference Include="..\C\C.csproj"> <Properties>Net48=$(Net48)</Properties> </ProjectReference>
如果还有其他需要传递的属性,用分号分隔即可,比如<Properties>Net48=$(Net48);OtherProp=$(OtherProp)</Properties>。
内容的提问来源于stack exchange,提问作者Quajak
相关产品推荐
相关产品推荐

