Невозможно создать надстройку Excel VSTO: «Попытка загрузить программу с неверным форматом» для файлов winmd - PullRequest
0 голосов
/ 01 февраля 2020

Я не могу построить таргетинг проекта. NET Framework 4.7.2. В частности, это надстройка Excel VSTO с использованием развертывания ClickOnce.

Я использую Visual Studio 2019. Надстройка имеет рабочую базу кода, но ранее она была нацелена на более ранние версии. NET версий ( 4.0, 4.5). Изменения в некоторых зависимостях и веб-службах, с которыми они взаимодействуют, означают, что некоторые используемые библиотеки нуждались в обновлении до более поздних версий, и поэтому некоторая перестановка зависимостей привела меня в этот беспорядок.

Сборка всегда дает сбой с несколькими ошибками вида:

Проблема создания манифеста. Не удалось загрузить файл или сборку 'PATH_TO_NUGET_PACKAGES\microsoft.windows.sdk.contracts\**\*.winmd' или одну из ее зависимостей. Была предпринята попытка загрузить программу с неверным форматом.

Все они находятся в этом Microsoft.Windows.Sdk.Contracts пространстве имен, которое получается где-то по пути. Эта надстройка использует WinForms.

Я видел несколько ответов здесь и в других местах на подобные проблемы, но ни одно из решений не помогло при решении моей проблемы.

Например, в «Не удалось загрузить исключение для файла или сборки» , предоставляется несколько параметров. Принятый ответ включает параметр безопасности ClickOnce, но он даже не виден в типе вывода библиотеки классов, которым являются надстройки.

Некоторые другие ответы на этот и другие вопросы касаются конфликтов между 32-разрядными и 64-разрядные развертывания или зависимости. Некоторые ответы предназначены для IIS, другие - нет, но в целом они в основном зависят от того, используете ли вы «Любой ЦП» в качестве цели платформы, или что все нацелено на цель x86. Я использовал «Любой ЦП» с самого начала, но переход на любую цель в настройках сборки и доступных конфигурациях не изменился в результате. Возможно, виновата цель архитектуры из-за различий в зависимостях, но я не знаю, как ее разрешить.

Принятый ответ в 'Не удалось загрузить файл или сборку Windows .winmd ' предлагает исключить файлы .winmd, изменив их статус Publi sh в области «Publi sh» свойств проекта. Однако, поскольку это надстройка Office, у меня вообще нет такой кнопки.

В другом ответе упоминается ее добавление в GA C с gacutil -i, но это не сработает. для этих .winmd файлов.

Это не моя область знаний, я не являюсь первоначальным автором этой надстройки, и я едва знаю, что я делаю, когда дело доходит до. NET , Буду признателен за любую помощь в этом!

1 Ответ

0 голосов
/ 02 февраля 2020

Я в конце концов понял это. В моем случае одной из моих зависимостей была библиотека. NET Framework, которая сама зависела от библиотеки (того же поставщика), которая имела только. NET стандартное развертывание.

Прямая ссылка была на тот, который был разработан для решений WinForms, но базовый вызывал ссылки на все эти пакеты WinRT, которые в конечном итоге не были разрешены моей сборкой. Или что-то в этом роде.

В любом случае, это решение сработало для меня. Я добавил прямую ссылку на пакет в нарушающую сборку Microsoft.Windows.SDK.Contracts, но добавил следующий элемент <ExcludeAssets>, чтобы исключить все активы этого пакета из моего проекта. Ничто в моей надстройке на самом деле не зависит от них.

<PackageReference Include="Microsoft.Windows.SDK.Contracts">
  <Version>10.0.18362.2005</Version>
  <ExcludeAssets>all</ExcludeAssets>
</PackageReference>

Как только я это сделаю, она компилируется без каких-либо жалоб.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...