如何无错误配置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
相关产品推荐
相关产品推荐

