2015-09-25 17 views
8

В моем приложении WPF Desktop также используются классы WinRT.Не удалось загрузить файл или сборку Windows.winmd '

Для этого я следую этому руководству https://software.intel.com/en-us/articles/using-winrt-apis-from-desktop-applications.

Отлично, это работает.

Теперь, когда я пытаюсь создать файл MSI (я пробовал как с помощью Microsoft Installer и ClickOnce), я получаю эту ошибку:

Проблема генерации манифеста. Не удалось загрузить файл или сборку «C: \ Program Files (x86) \ Windows Kits \ 8.1 \ References \ CommonConfiguration \ Neutral \ Windows.winmd» или одна из его зависимостей. Попытайтесь загрузить программу с неправильным форматом.

Я уже пробовал отключить функцию ClickOnce, как было предложено here, с очисткой проекта и удалением ASP.NET из временной среды .NET.

Это мой стартап тег в моем app.config

Я использую VS2015 и C# Как я могу это исправить и создать свой MSI?

PS: У меня нет проблем с генерацией другого msi с помощью простого рабочего стола WPF.

ответ

25

Да, файл Windows.winmd, который вы добавили в качестве ссылки, является препятствием для развертывания проекта. Инструменты, которые вы используете, путают его содержимое, он выглядит точно так же, как сборка .NET. Но это не так. Формат файла .winmd является расширением формата библиотеки типа COM старого. Для WinRT они использовали формат метаданных .NET, чтобы преодолеть ограничения формата файла TLB.

Это была неплохая идея, многие инструменты .NET могут использовать метаданные as-is. Подобно компиляторам и дизассемблерам, им не нужно было внедрять всю эту инфраструктуру. Но он строго играет роль справочной сборки , только компилятор использует ее содержимое и никогда не должен быть развернут. Прямо сейчас вам не очень нравится эта хорошая идея :)

Однако очень легко исправить развертывание ClickOnce. Откройте «Проект»> «Свойства»> «Опубликовать вкладку»> «Файлы приложений». Измените параметр «Опубликовать статус» для Windows.winmd на «Исключить». Пример проекта скрин-шот:

enter image description here


Это не очень понятно, что вы имеете в виду под «Microsoft Installer», я предполагаю, что вы говорите о проекте установки. Хотя он удален из Visual Studio из-за хронических проблем, он по-прежнему доступен в галерее.

Это более трудный орешек для взлома, вы обычно используете элемент контекстного меню «Добавить»> «Проект», чтобы определить его зависимости. Это больше не работает, он умирает с жалким сообщением об ошибке неописуемых:

кода

ERROR: An error occurred while validating. HRESULT = '80070057'

Ошибки означает «недопустимый параметр», который не помогает сузить проблему. Но вы можете смело предположить, что он умирает при попытке разрешить ссылку Windows.winmd в сборке .exe.

Обходной путь не Позволяет автоматически определять зависимости, но выбирать их самостоятельно. На экране редактора под названием «Файловая система на целевом компьютере» выберите папку приложений. Щелкните правой кнопкой мыши «Первичный вывод из ...» и выберите «Удалить».

Щелкните правой кнопкой мыши папку приложений> Добавить> Файл и выберите файл .exe проекта из папки bin \ Release. Повторите для других файлов, вы можете использовать список файлов, который вы получили в списке файлов приложений ClickOnce, в качестве руководства.

Построить проект, теперь вы получите:

WARNING: Unable to find dependency 'WINDOWS' (Signature='(null)' Version='255.255.255.255') of assembly 'WindowsFormsApplication144.exe'

Который совершенно доброкачественными, мы не хотим, чтобы найти его, программа Setup.exe работает нормально.

+0

спасибо @HansPassant, я попробую это завтра, так как теперь у меня есть только ноутбук ubuntu. Да, «установщик Microsoft», я имел в виду проект установки, я назвал это потому, что я думал, что, поскольку эта функция Visual Studio существует после установки программы «Microsoft Installer» ... – eeadev

+0

работает с ClickOnce, но это будет не генерировать MSI-файл, не так ли? Что делать, если мне нужен MSI? – eeadev

+0

Вы получаете MSI от «Microsoft Installer», о котором вы говорили. Это сценарий, который я тестировал, и из которого я копирую/вставляю сообщения об ошибках. –

Смежные вопросы