由于错误我无法完全理解,因此无法构建-“ ReferencePath”未为元数据“ CopyLocal”定义值

时间:2019-07-25 16:00:20

标签: c# visual-studio visual-studio-2017

在我开始讨论之前,对不起,这有点含糊,我真的不知道我要问的范围

我最近正在更新一个项目,但是由于以下错误(为了简化起见,修剪了一些路径),我无法构建该项目进行测试:

  

项目“ C:\ Users..blah .. \ packages \ System.Runtime.WindowsRuntime.4.6.0-preview4.19212.13 \ build \ net461 .... \ ref \ netstandard2.0 \ System.Runtime。项目列表“ ReferencePath”中的“ WindowsRuntime.dll”未为元数据“ CopyLocal”定义值。为了使用此元数据,可以通过指定%(ReferencePath.CopyLocal)对其进行限定,或者确保此列表中的所有项目都为此元数据定义了一个值。

我在线上搜索了其他解决方案,但找不到导致此问题的答案

关于实际错误,我会假设我可以在编辑器中加载项目文件,然后将%(ReferencePath.CopyLocal)附加到“ CopyLocal”为空值的任何字段中,但这不是似乎是这样

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

任何帮助将不胜感激

4 个答案:

答案 0 :(得分:1)

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

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

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

但是,这是A **的全部困扰,因此,如果有人有更好的解决方案而不涉及此操作,请随时发布!

答案 1 :(得分:1)

当我尝试从DotNet 4.5项目迁移到DotNet 4.6.2项目时,问题发生在我身上。当我从package.config迁移到PackageReference时,此问题已解决。

在项目解决方案中的“参考”上单击鼠标右键->选择“从package.config迁移到PackageReference”。

希望这会有所帮助。

答案 2 :(得分:0)

我遇到了类似的问题。我通过删除缓存文件(如 obj、bin 和 .vs 文件)解决了这个问题。希望这对有类似问题的人有所帮助

答案 3 :(得分:0)

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

C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VisualStudio\v16.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(226,9): error MSB4096: The item "C:\Users\XXXXXXX\.nuget\packages\system.runtime.windowsruntime\4.6.0\buildTransitive\net461\..\..\ref\netstandard2.0\System.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 Studio\2019\Professional\MSBuild\Microsoft\VisualStudio\v16.0\OfficeTools\Microsoft.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