如何在VS项目中排除NuGet主包依赖的所有子包编译输出
解决方案
方案1:显式配置FSharp.Core的输出行为,规避重复引用报错
在项目文件的首个<PropertyGroup>节点中添加配置,关闭F# SDK默认的隐式FSharp.Core引用逻辑:
<DisableImplicitFSharpCoreReference>true</DisableImplicitFSharpCoreReference>
之后手动添加FSharp.Core的包引用,配置和FSFramework一致的排除规则即可:
<PackageReference Include="FSharp.Core" Version="与FSFramework依赖匹配的版本号" ExcludeAssets="runtime" />
注意:该方案中指定的FSharp.Core版本需要和FSFramework依赖的版本保持一致,避免运行时出现版本不兼容问题。
方案2:强制拦截FSharp.Core的复制逻辑,无需修改现有引用配置
直接在项目文件末尾添加以下构建目标节点,构建时会自动移除FSharp.Core的输出复制任务,兼容性更强:
<Target Name="RemoveFSharpCoreFromCopyLocal" AfterTargets="ResolveAssemblyReferences"> <ItemGroup> <ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)" Condition="'%(Filename)' == 'FSharp.Core'" /> </ItemGroup> </Target>
方案3:全局排除FSFramework所有传递依赖的运行时资产
如果FSFramework的全部依赖都由插件加载器提供,不需要随插件输出,可以直接修改FSFramework的包引用配置,添加PrivateAssets="all"属性:
<PackageReference Include="FSFramework" Version="1.0.0-preview-1" ExcludeAssets="runtime" PrivateAssets="all" />
该配置会让NuGet自动过滤FSFramework所有传递依赖的输出,适合纯插件类项目的开发场景。
内容的提问来源于stack exchange,提问作者user430788
相关产品推荐
相关产品推荐

