SDK风格项目ProjectReference忽略传递依赖Condition属性问题咨询
解决方案
SDK风格项目与传统非SDK风格项目互操作时,默认不会识别上游非SDK项目中ProjectReference的条件属性,属于已知的兼容问题,可通过以下两种方案解决:
方案1:在SDK风格主项目中显式排除无效传递引用(兼容性最好,不影响其他依赖逻辑)
直接编辑_TestSDK.csproj文件,添加如下配置:
<!-- 非DebugJS配置下主动移除PSWrapper的传递引用 --> <ItemGroup Condition="'$(Configuration)' != 'DebugJS'"> <ProjectReference Remove="..\PSWrapper\PSWrapper.csproj" /> </ItemGroup>
该配置会在非DebugJS生成时直接将PSWrapper从引用列表中剔除,不会触发dll查找逻辑,也不会将对应dll复制到输出目录。
方案2:修改上游TestTool项目的引用属性,控制传递逻辑
编辑TestTool.csproj中对PSWrapper的条件引用节点,添加传递限制:
<ProjectReference Include="..\PSWrapper\PSWrapper.csproj" Condition="'$(Configuration)'=='DebugJS'"> <Project>{1675096e-bf7b-486b-89f9-dfe147418dbc}</Project> <Name>PSWrapper</Name> <!-- 仅DebugJS配置下允许引用传递到下游项目 --> <Private>True</Private> </ProjectReference>
传统非SDK项目中Private="True"的项目引用仅在当前项目生效,不会默认传递给下游引用方,仅在DebugJS配置下生效时才会将PSWrapper传递给_TestSDK。
生效验证
修改配置后按以下步骤操作清除缓存:
- 清理解决方案所有输出目录
- 关闭Visual Studio,删除解决方案根目录的
.vs隐藏文件夹 - 重启Visual Studio后重新生成对应配置的项目
内容的提问来源于stack exchange,提问作者Serg
相关产品推荐
相关产品推荐

