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

kza*_*kza 10 nuget portable-class-library windows-8 windows-runtime appx

  1. 创建新的Windows 8应用程序 App1
  2. ClassLibrary1Windows 8类库项目添加到解决方案中
  3. PortableClassLibrary1针对Windows 8和Windows Phone 7.5的便携式类库添加到解决方案中
  4. 参考HttpClientnuget包ClassLibrary1
  5. 参考HttpClientnuget包PortableClassLibrary1
  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
Run Code Online (Sandbox Code Playgroud)

请注意,如果您引用任何包含win8和便携式程序集混合的nuget包,则会再现相同的错误.

预期结果:库的大多数特定版本(win8 one)被打包到.appx中,并且忽略了可移植版本

有关如何欺骗appx打包程序并构建此类Windows 8项目的任何想法?

jap*_*apf 9

看起来这里描述的解决方案有效:http://cyanbyfuchsia.wordpress.com/2013/05/03/payload-contains-two-or-more-files-with-the-same-destination-path/

基本上,您必须在从主应用程序引用的WinRT项目中将"复制本地"设置为false.


Dav*_*ean 2

除此之外,您还应该收到类似以下内容的警告:

所有引用 ClassLibrary1.csproj 的项目都必须安装 nuget 包 Microsoft.Bcl.Build。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=317569

这说明有问题。基本上,简而言之,您应该将 HttpClient.Compression 安装到所有项目中。MSBuild/AppX 打包不知道在可移植库和存储库项目之间部署哪个二进制文件(它们具有不同的 API 和版本)。将包安装到应用程序中,告诉它。