Установите для нескольких исполняемых проектов общий выходной путь в Windows 10 Desktop Bridge.

Я ищу способ объединить все мои ссылки на приложения в общий каталог внутри пакета AppX. Типы проектов ссылок являются стандартными проектами Visual C++ (Win32). Текущая структура моего решения выглядит следующим образом:

Структура решения

* Solution
|__ Exe_1 (Visual C++ Project)
|__ Exe_2 (Visual C++ Project)
|__ Exe_3 (Visual C++ Project)
|
|__ MyApp (AppX Project)
    |__ Applications
    |   |__ Exe_1
    |   |__ Exe_2
    |   |__ Exe_3
    |___ Images\
    |___ Package.appxmanifest     

После публикации решения и развертывания пакета AppX я получаю следующую структуру каталогов:

[ Фактическая ] развернутая структура каталогов AppX

Com.MyApp.12107._cx40ttqa_n3.48019.0_x64zyj5
|__ Exe_1\Exe_1.exe
|__ Exe_2\Exe_2.exe
|__ Exe_3\Exe_3.exe

[ Ожидается ] Развернутая структура каталогов AppX

Com.MyApp.12107._cx40ttqa_n3.48019.0_x64zyj5
|__ Exe_1.exe
|__ Exe_2.exe
|__ Exe_3.exe

Что я пробовал

  • Я попытался следовать это руководство в MSDN, но оно не помогло для проектов на основе Visual C++.
  • Изменение выходного каталога в свойствах проекта исполняемого файла не дало никакого эффекта.
  • В проект AppX добавлено событие после сборки для ручного перемещения файлов.

Чего я хочу достичь

Результат аналогичен тому, как Apple удалось упаковать файлы, связанные с iTunes, в корневой каталог приложения.

Пакет приложения iTunes на локальном компьютере


ОБНОВЛЕНИЕ №1

Я отредактировал файл MyApp.wapproj в проекте AppX и изменил следующие строки:

<ProjectReference Include="..\Exe_1\Exe_1.vcxproj">
  <OutputItemType>Content</OutputItemType>
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</ProjectReference>

После внесения изменений EXE-файл теперь только копируется, но не используется в качестве реальной точки входа. Случай аналогичен методу события после сборки.


person Ahmad N. Chatila    schedule 11.07.2020    source источник
comment
Я немного смущен тем, как вы изменили выходной каталог? Если вы установите путь к папке appx, это сработает? Кроме того, могу ли я узнать, почему вы хотите установить для исполняемых проектов общий выходной путь?   -  person Faywang - MSFT    schedule 13.07.2020
comment
@Faywang-MSFT Независимо от выходного каталога каждого проекта Visual C++, проект AppX размещает каждый скомпилированный исполняемый проект (включая его ссылки) в соответствии с именем папки проекта. т.е. Предположим, что Foo — это EXE-файл Visual C++, на который ссылается проект AppX. После создания и установки пакета каталог приложения будет содержать папку с именем Foo, в которой находится исполняемый файл. Цель этого вопроса — найти способ, чтобы содержимое Foo оставалось в корневом каталоге приложения, а не вкладывалось в имя проекта.   -  person Ahmad N. Chatila    schedule 14.07.2020
comment
Исходя из вашего требования, невозможно хранить исполняемый файл непосредственно в корневом приложении.   -  person Faywang - MSFT    schedule 14.07.2020
comment
@ Faywang-MSFT Если да, то как iTunes удалось упаковать все связанные файлы в корневой каталог приложения? Пожалуйста, просмотрите обновленный вопрос.   -  person Ahmad N. Chatila    schedule 14.07.2020
comment
Однако это невозможно в приложениях uwp.   -  person Faywang - MSFT    schedule 15.07.2020
comment
@Faywang-MSFT Приложение основано на Win32. Так же, как Айтюнс   -  person Ahmad N. Chatila    schedule 15.07.2020
comment
Обсуждение, это невозможно в этом сценарии.   -  person Faywang - MSFT    schedule 16.07.2020
comment
@Faywang-MSFT К вашему сведению, вы можете проверить решение ниже.   -  person Ahmad N. Chatila    schedule 18.07.2020


Ответы (1)


На момент написания статьи Visual Studio 2019 (v16.6.4) не предлагает встроенной опции для изменения выходных путей для указанных приложений. В качестве альтернативы вы должны отозвать все ссылки на приложения из проектов и добавить следующее в импорт активов в вашем файле проекта .wapproj:

<Content Include="..\Path\To\Your\Exe_1\Exe_1.exe" />
<Content Include="..\Path\To\Your\Exe_2\Exe_2.exe" />
<Content Include="..\Path\To\Your\Exe_3\Exe_3.exe" />

Кроме того, вам нужно будет заменить тег <EntryPointProjectUniqueName> на <EntryPointExe>, так как мы больше не имеем дело с упомянутыми приложениями (по крайней мере, в случае автора).

<EntryPointExe>..\Path\To\Your\Exe_1\Exe_1.exe</EntryPointExe>

Наконец, вы получите вывод, аналогичный ожиданиям, заявленным автором, после его развертывания на машине.


Отзыв от Microsoft

Как вы можете себе представить, у нас есть причина, по которой мы это делаем, и основная проблема — дублирующиеся имена файлов, а также некоторые проблемы с загрузкой в ​​​​магазин. На данный момент мы не предоставляем переопределения, которое позволит вам достичь этого, хотя есть некоторые хаки, которые вы могли бы сделать, чтобы сделать это возможным, но это не рекомендуется.​

Скобан [MSFT]

Обсуждение можно найти по адресу здесь.

person Ahmad N. Chatila    schedule 18.07.2020