Nuget、可移植库和WinRT appx:负载包含两个或多个具有相同目标路径的文件。

10
  1. 创建新的Windows 8应用程序App1
  2. ClassLibrary1 Windows 8类库项目添加到解决方案中
  3. 将针对Windows 8和Windows Phone 7.5的PortableClassLibrary1便携式类库添加到解决方案中
  4. ClassLibrary1中引用HttpClient nuget包
  5. PortableClassLibrary1中引用HttpClient nuget包
  6. 同时引用ClassLibrary1PortableClassLibrary1
  7. 编译解决方案

在.appx包阶段出现错误。

Payload contains two or more files with the same destination path 'System.Net.Http.Primitives.dll'. 
Source files: 
\Projects\App1\PortableClassLibrary1\bin\Debug\System.Net.Http.Primitives.dll
\Projects\App1\packages\Microsoft.Net.Http.2.2.13\lib\win8\System.Net.Http.Primitives.dll
请注意,如果您引用任何包含win8和可移植程序集混合的NuGet包,则会复制相同的错误。
期望的结果: 库的最具体版本(win8版本)被打包到.appx中,可移植版本被忽略。
有什么办法可以欺骗appx打包程序并构建这种Windows 8项目吗?
3个回答

9

我最终采取的方法是将NuGet包添加到主应用程序中,然后确保对于所有引用的库,“复制本地”在引用上设置为false。因此,应用程序项目是包含这些文件的“主控”。我还收到了安装Microsoft.Bcl.Build的警告,但这样做并没有帮助。 - RandomEngy
我之所以出现这个错误,是因为我的 UnitTesting 项目也有一个 Assets 文件夹。由于单元测试不需要这些资源(标志、图标等),我只需将它们删除即可。 - Ebsan

2
除此之外,您应该会收到类似以下的警告信息:
“所有引用ClassLibrary1.csproj的项目都必须安装nuget包Microsoft.Bcl.Build。有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkID=317569。”
这表明存在问题。简而言之,您应该在所有项目中安装HttpClient.Compression。MSBuild/AppX打包不知道要在便携式库和商店库项目之间部署哪个二进制文件(它们具有不同的API和版本)。将该软件包安装到应用程序中即可解决问题。

0

我也遇到过这样的问题。原因是我在不同的项目之间共享了一个解决方案。我不得不改变解决方案的名称,因为它与其中一个项目的名称完全相同。改名后我就遇到了这个问题。

我通过以下方式解决了它:右键单击我重命名的解决方案,然后同时使用两个项目的属性,并确保程序集名称与解决方案名称相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接