由于我不太理解的错误而无法构建 - "ReferencePath"没有定义元数据的值"CopyLocal"



我最近一直在更新一个项目,但由于以下错误(修剪了一些路径以使其更短),我无法构建这个项目进行测试:

项"C:\用户..等等。。\packages\System.Runtime.WindowsRuntime.4.6.0-preview4.19212.13\buildet461....\refetstandard2.0\System.Runtime.WindowsRuntime.dll"项列表"ReferencePath"中未定义元数据"CopyLocal"的值。 若要使用此元数据,请通过指定 %(ReferencePath.CopyLocal) 来限定它,或者确保此列表中的所有项都为此元数据定义一个值。

我已经在网上搜索了其他解决方案,但没有找到导致这种情况的答案。

就实际错误而言,我假设我可以在编辑器中加载我的项目文件,并将%(ReferencePath.CopyLocal)附加到具有"CopyLocal"空值的任何字段,但情况似乎并非如此

我什至不确定我需要查看哪个文件!

当我尝试从 DotNet 4.5 项目迁移到 DotNet 4.6.2 项目时,我遇到了这个问题。当我从 package.config 迁移到 PackageReference 时,此问题已得到解决。

右键单击项目解决方案中的"引用">选择"从 package.config 迁移到 PackageReference"。

我也有类似的问题。我通过删除 obj、bin 和 .vs 文件等缓存文件来解决此问题。希望这对解决类似问题的人有所帮助

我在尝试使用Auth0 WinForm SDK制作MS Office加载项时遇到了这个问题。我得到的错误是:

C:Program Files (x86)Microsoft Visual Studio2019ProfessionalMSBuildMicrosoftVisualStudiov16.0OfficeToolsMicrosoft.VisualStudio.Tools.Office.targets(226,9): error MSB4096: The item "C:UsersXXXXXXX.nugetpackagessystem.runtime.windowsruntime4.6.0buildTransitivenet461....refnetstandard2.0System.Runtime.WindowsRuntime.dll" in item list "ReferencePath" does not define a value for metadata "CopyLocal".  In order to use this metadata, either qualify it by specifying %(ReferencePath.CopyLocal), or ensure that all items in this list define a value for this metadata.

为了解决这个问题,我不得不从错误消息中编辑引用文件中的第 226 行。就我而言,该文件是:

C:Program Files (x86)Microsoft Visual Studio2019ProfessionalMSBuildMicrosoftVisualStudiov16.0OfficeToolsMicrosoft.VisualStudio.Tools.Office.targets 

我更改了这一行:

<_CopyLocalFalseRefPaths Include="@(ReferencePath)" Condition="'%(CopyLocal)' == 'false'" />

对此:

<_CopyLocalFalseRefPaths Include="@(ReferencePath.CopyLocal)" Condition="'%(CopyLocal)' == 'false'" />

我从这里得到了这个解决方案:https://marcelegger.net/referencepath-does-not-define-a-value-for-metadata-copylocal

我发现的唯一解决方案是创建一个具有相同文件结构的新项目,并具有比拟的引用和导入结构作为新的驱动器号。

然后将旧的 proj 文件替换为此新的 proj 文件,并再次手动更新驱动器号以指向正确的位置

在我看来,该错误实际上是错误的,并且是由于重新加载某些Nuget软件包而导致的损坏的副产品

但是,这远非最佳,所以如果有人有更好的解决方案,不涉及这样做,请随时发布!

@(ReferencePath)替换为@(ReferencePath.CopyLocal)对我也有用,但由于授权问题,我不得不将文件保存在另一个目录中,并将其复制到正确的目录。

这似乎是 msbuild 处理空项组中元数据引用的方式的变化。 编辑目标文件通常不切实际,但我有一个针对 .csproj 文件的解决方法。 在开头附近添加以下内容:

<ItemDefinitionGroup>
<ReferencePath>
<CopyLocal>false</CopyLocal>
</ReferencePath>
</ItemDefinitionGroup>

这将"CopyLocal"定义为"参考路径"的默认元数据,似乎对我有用。

最新更新