Nuget, портативная библиотека и приложение WinRT: полезная нагрузка содержит два или более файла с одним и тем же целевым контуром
- Создайте новое приложение Windows 8
App1
- Добавить
ClassLibrary1
Проект библиотеки классов Windows 8 для решения
- Добавить
PortableClassLibrary1
переносимую библиотеку классов, ориентированную на Windows 8 и Windows Phone 7.5, на решение
- Ссылка
HttpClient
пакет nuget в ClassLibrary1
- Ссылка
HttpClient
пакет nuget в PortableClassLibrary1
- Ссылка как
ClassLibrary1
, так и PortableClassLibrary1
- Компилировать решение
Вы получаете ошибку на этапе пакета .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
Обратите внимание, что одна и та же ошибка воспроизводится, если вы ссылаетесь на любой пакет nuget, содержащий как win8, так и переносные комбинации сборок.
Что ожидается:
Наиболее определенная версия библиотеки (win8 one) упакована в .appx, а переносимая версия игнорируется
Любые идеи о том, как обмануть appx packager и создать такие проекты Windows 8?
Ответы
Ответ 1
В дополнение к этому вы должны получать предупреждения, похожие на:
Все проекты, ссылающиеся на ClassLibrary1.csproj, должны установить nuget пакет Microsoft.Bcl.Build. Для получения дополнительной информации см. http://go.microsoft.com/fwlink/?LinkID=317569.
Это указывает на проблему. В основном, если не считать этого, вы должны установить HttpClient.Compression во все проекты. Упаковка MSBuild/AppX не знает, какую бинарную версию нужно развернуть между проектом переносимой библиотеки и библиотеки хранилища (у них разные API и версии). Установка пакета в приложение, сообщает ему.
Ответ 2
Похоже, что описанное здесь решение работает: http://cyanbyfuchsia.wordpress.com/2013/05/03/payload-contains-two-or-more-files-with-the-same-destination-path/
В принципе, вы должны установить "Копировать локальную" в значение false в проекте WinRT, на который ссылается основное приложение.
Ответ 3
У меня была такая проблема тоже. Это было , потому что я поделился одним из моих решений между проектами. Мне пришлось переименовать решение, потому что имя было одинаковым, как в одном из проектов. После переименования у меня возникла эта проблема.
I исправлено: по щелчку правой кнопкой мыши по решению, которое я переименовал и использовал оба проекта, затем свойства, а затем использовал те же имена в имени имя сборки, как имя решения.