Почему приложение со встроенным Adobe Reader Control работает при публикации из VS 2013, но не VS 2017? - PullRequest
0 голосов
/ 04 сентября 2018

Мое приложение использует элемент управления «Adobe PDF Reader» для просмотра PDF-документов в форме Windows. Он публикуется как приложение ClickOnce. Если я опубликую его с помощью Visual Studio 2013, он будет установлен и работает нормально. Но если я опубликую его с помощью Visual Studio 2017 (без внесения каких-либо изменений в решение), он будет установлен, но не запустится. Выдает эту ошибку: System.IO.FileNotFoundException: не удалось загрузить файл или сборку 'AxInterop.AcroPDFLib, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = 963d585c671a3ae6' или одна из ее зависимостей. Система не может найти указанный файл.

Поэтому я пошел в «Публикация / файлы приложений ...» в Visual Studio, чтобы включить отсутствующую DLL, только чтобы узнать, что я не смог включить ее, потому что ее нет в списке.

В VS 2017 окно «Файлы приложений» выглядит так: enter image description here

Но в VS 2013 окно «Файлы приложения» выглядит так: enter image description here

Теперь в VS 2013 файл MANIFEST, опубликованный в папке ClickOnce, содержит этот XML:

<dependency>
    <dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="AxInterop.AcroPDFLib.dll" size="9216">
      <assemblyIdentity name="AxInterop.AcroPDFLib" version="1.0.0.0" language="neutral" processorArchitecture="msil" />
      <hash>
        <dsig:Transforms>
          <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
        </dsig:Transforms>
        <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
        <dsig:DigestValue>Nyyy1D0D9ublZaujf9VDo73k2Ic=</dsig:DigestValue>
      </hash>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="Interop.AcroPDFLib.dll" size="12800">
      <assemblyIdentity name="Interop.AcroPDFLib" version="1.0.0.0" language="neutral" processorArchitecture="x86" />
      <hash>
        <dsig:Transforms>
          <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
        </dsig:Transforms>
        <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
        <dsig:DigestValue>ECgRqgvCeIc6FfkrboUllt0qScw=</dsig:DigestValue>
      </hash>
    </dependentAssembly>
  </dependency>

Но приведенный выше XML отсутствует в файле MANIFEST при публикации с VS 2017.

Опять же, имейте в виду, что это точно такой же проект и решение. Я ничего не изменил.

Что мне нужно сделать, чтобы опубликованная версия VS 2017 включала необходимую информацию о зависимостях? Это ошибка или я что-то упустил?

Спасибо!

1 Ответ

0 голосов
/ 05 сентября 2018

После нескольких дней исследований, проб и ошибок я обнаружил простое решение для моей проблемы:

  1. В VS 2017 выполните «Build / Batch Build» для версий Debug и Release. ПРИМЕЧАНИЕ. При этом VS поместит необходимые файлы «AxInterop.AcroPDFLib.dll» и «Interop.AcroPDFLib.dll» в папку Bin \ Release.
  2. Теперь добавьте ссылку (с помощью параметра «Обзор»), чтобы добавить ссылки на файлы «AxInterop.AcroPDFLib.dll» и «Interop.AcroPDFLib.dll» в папке Bin \ Release.
  3. В Solution Explorer / References щелкните правой кнопкой мыши Interop.AcroPDFLib.dll и выберите «Свойства» в меню. Затем в окне «Свойства» измените «Вставить типы взаимодействия» на «Ложь».
  4. Теперь перейдите в Свойства проекта / Публикация / Файлы приложения и установите для параметра «Состояние публикации» значение «Включить» (не «Включить (Авто)») для этих двух библиотек.

Затем я опубликовал свое приложение как приложение ClickOnce, используя VS 2017, и все работало без исключения. Проблема решена!

Очевидно, что существует разница между способом публикации приложений в Visual Studio 2013 и Visual Studio 2017, поскольку это «исправление» не было необходимо в VS 2013, но в VS 2017.

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