[提问]csproj 中的究竟有什么区别

如题,一个 C#的 dll 项目( framework 4.8 )中,通过 fody 打包引用的库。VS 为 2022 版,Fody 为 nuget 上的最新版。默认情况下,设置引用的“复制本地”属性为 false 时,会自动在 csproj 中记录False,编译时就不会复制此文件,最后 Fody 生成的 dll 文件中也不会包含此引用的打包文件 standard 2.0 后(经测试,2.1 , 5.06.0 均有同样问题),引用的右下角属性内的“复制本地”选项变为了影响 CopyLocal 项,例如我此时将这个文件改为“复制本地”,那么 csproj 中将会变成这样问题来了,这样的配置下,在生成时并不会复制 Example.exe ,fody 也不会打包此文件。即使去掉 Fody 的引用,最后生成文件时,也依然不会在生成目录里复制 Example.exe ,所以大概和 Fody 是没关系的。反而如果手动更改为 True ,那么编译时将会正常复制并打包。 简单来说就是,VS 在编译时候似乎完全无视了,而只认。查看微软的,VS2022 的 MSBuild 说明中只有 Private 元数据而没有 CopyLocal 。根据说明,Private 属性指示“指定是否应将引用复制到输出文件夹。 此特性与 Visual Studio IDE 中的引用的“复制本地”属性相匹配。”从头到尾都没有提到过,根据生成时的表现来看,确实也只有设置的值有实际效果。但是即使直接新建空白项目,引用文件并设置“复制本地”后,VS 修改的也只有 csproj 中的项而不是项。在右侧的属性中任何选项都无法看到或修改当前 csproj 中的值。只能手动编辑 csproj 文件。所以我现在非常迷糊,到底这个是什么关系呢?我之前以为是升级换代的关系,但是即使我删掉了旧项目中的只保留,在编译项目时,文件复制依然会按照 Private 的默认值(true)执行文件复制与 Fody 打包,而完全无视了的值。彻底把我给整不会了 感谢各位大佬的解答(跪谢)

请登录后发表评论

    没有回复内容