You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无错误配置PropertyChanging.Fody?解决安装后编译报错

解决方案

1. 修正包引用的PrivateAssets配置

针对MSBUILD警告,确保两个工程中所有Fody相关包的引用都设置PrivateAssets="All",避免依赖传递引发冲突:
编辑工程的.csproj文件,修改对应PackageReference节点:

<PackageReference Include="Fody" Version="你的版本号">
  <PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="PropertyChanged.Fody" Version="你的版本号">
  <PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="PropertyChanging.Fody" Version="你的版本号">
  <PrivateAssets>All</PrivateAssets>
</PackageReference>

2. 重建Fody配置文件

  • 删除两个工程中已有的Weavers.xml文件
  • 手动在每个工程根目录创建新的Weavers.xml,内容如下:
<Weavers>
  <PropertyChanged />
  <PropertyChanging />
</Weavers>
  • 确认NuGet包已正确安装:右键工程→管理NuGet程序包,检查Fody、PropertyChanged.Fody、PropertyChanging.Fody都在已安装列表中

3. 彻底清理编译缓存

  • 关闭Visual Studio
  • 删除两个工程的bin、obj目录,以及解决方案根目录的.vs隐藏文件夹
  • 重新打开解决方案,依次执行清理解决方案→重建解决方案

4. 统一版本兼容性

  • 确保三个包的版本相互匹配:比如Fody 7.x对应PropertyChanging.Fody 5.x、PropertyChanged.Fody 4.x;避免跨大版本组合使用
  • 卸载所有Fody相关包,按顺序重新安装:先装Fody,再装PropertyChanged.Fody,最后装PropertyChanging.Fody

5. 处理跨工程引用冲突

  • 基础工程General和引用它的MyPhone工程,必须使用完全一致的Fody相关包版本
  • 如果General工程不需要拦截PropertyChanging事件,可在其Weavers.xml中只保留<PropertyChanged />节点,减少织入器加载冲突

6. 定位空引用异常细节

若以上步骤无效,打开MSBUILD详细日志排查:

  • 工具→选项→项目和解决方案→生成并运行,将MSBUILD项目生成输出详细程度设为详细
  • 重新编译,查看日志中NullReferenceException的堆栈信息,确认是织入器版本问题还是工程配置遗漏;必要时降级到更稳定的包版本

内容的提问来源于stack exchange,提问作者Yisroel M. Olewski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 07:27:19