簡體   English   中英

從VS 2013而不是VS 2017發布時,為什么具有嵌入式Adobe Reader Control的應用程序可以工作?

[英]Why does app with embedded Adobe Reader Control work when published from VS 2013 but not VS 2017?

我的應用程序使用“ Adob​​e PDF Reader”控件在Windows窗體上查看PDF文檔。 它作為ClickOnce應用程序發布。 如果我使用Visual Studio 2013發布它,它將安裝並正常運行。 但是,如果我使用Visual Studio 2017發布(未對解決方案進行任何更改),它將安裝但無法運行。 它將引發此錯誤:System.IO.FileNotFoundException:無法加載文件或程序集'AxInterop.AcroPDFLib,版本= 1.0.0.0,區域性=中性,PublicKeyToken = 963d585c671a3ae6'或其依賴項之一。 該系統找不到指定的文件。

因此,我去了Visual Studio中的“發布/應用程序文件...”以包含丟失的dll,卻發現我無法包含它,因為它沒有列出。

在VS 2017中,“應用程序文件”窗口如下所示: 在此處輸入圖片說明

但是在VS 2013中,“應用程序文件”窗口如下所示: 在此處輸入圖片說明

現在在VS 2013中,在ClickOnce文件夾中發布的MANIFEST文件包含以下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>

但是,與VS 2017一起發布時,MANIFEST文件中缺少上述XML。

同樣,請記住,這是完全相同的項目和解決方案。 我什么都沒改變。

我需要做什么才能使VS 2017發布版本包含必需的依賴項信息? 這是一個錯誤,還是我缺少什么?

謝謝!

經過幾天的調查和反復試驗,我發現了一個解決此問題的簡單方法:

  1. 在VS 2017中,對Debug和Release版本都執行“ Build / Batch Build”。 注意:這樣,VS會將必要的文件“ AxInterop.AcroPDFLib.dll”和“ Interop.AcroPDFLib.dll”放入Bin \\ Release文件夾。
  2. 現在添加引用(使用“瀏覽”選項),以添加對Bin \\ Release文件夾中的“ AxInterop.AcroPDFLib.dll”和“ Interop.AcroPDFLib.dll”文件的引用。
  3. 在解決方案資源管理器/參考中,右鍵單擊Interop.AcroPDFLib.dll,然后在菜單上選擇“屬性”。 然后在“屬性”窗口中,將“嵌入互操作類型”更改為False。
  4. 現在轉到Project Properties / Publish / Application Files並將這兩個dll的發布狀態設置為“包含”(不是“包含(自動)”)。

然后,我使用VS 2017將我的應用程序發布為ClickOnce應用程序,並且一切正常運行。 問題解決了!

Visual Studio 2013和Visual Studio 2017發布應用程序的方式之間顯然有區別,因為VS 2013不需要此“修復”,而VS 2017則不需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM