必须在GAC

时间:2017-07-20 21:34:46

标签: c# wpf winforms visual-studio clickonce

最近我尝试了Visual Studio 2017.我们有一个MSDN订阅。我们正在开发一些内部应用程序,我们将其作为WPF应用程序编写。这些应用程序需要安装在用户没有管理权限的用户计算机(Windows 7到Windows 10)上。在这一点上,最让我们受伤的是让ReportViewer控件安装而无需管理员。 VS 2015及以后版本是不可能的,因为(所以我理解)VS 2015及更早版本,ReportViewer控件是一个ActiveX控件,需要管理员权限才能安装。有人告诉我,使用VS 2017新的ReportViewer控件(版本14)不是ActiveX控件;它不需要管理员权限。这是个好消息,我告诉同事们。为了证明这一点,我使用VS 2017编写了一个非常简单的WPF应用程序。我所做的只是将ReportViewer控件放到窗口上。它确实需要大约6周的时间才能完成工作(方式比它应该的更长),但我使用ClickOnce部署将其部署到一台机器上。

接下来,我想我会向自己证明我可以再次这样做,这次记下我做了什么。我已经尝试了两次复制相同的简单应用程序,但我不断收到以下消息:

enter image description here

这根本不会发生,因为这会让我们回到同样的问题 - 一些管理员必须靠近才能安装这个应用程序。我们不希望这样。这里简要介绍一下我采取的步骤:

  1. 使用VS中的程序包管理器控制台安装Microsoft.SqlServer.Types版本14.0.314.76。
  2. 使用程序包管理器控制台安装Microsoft.ReportingServices.ReportViewerControl.Winforms版本140.340.80
  3. 在XAML中,我在窗口标记中包含了名称空间Microsoft.ReportViewer.WinForms。
  4. 添加了对System.Windows.Forms和WindowsFormsIntegration
  5. 的引用
  6. 在窗口的Grid标记中添加了以下XAML:

         

  7. 设置ClickOnce部署

  8. 由于涉及中文位置文件的错误,我进入了项目的发布标签|应用程序文件并将所有以“zh-”开头的文件发送到“排除发布状态”。

  9. 然后我将其发布到网络共享,并在未使用没有权限的帐户安装旧版ReportViewer的计算机上运行ClickOnce Setup.exe。

    我在本文开头附近收到了“需要更新系统”消息。

    为什么会这样?为什么要在GAC中安装Microsoft.VisualStudio.Text.Logic?特别是对于甚至根本没有连接到任何数据库的应用程序?

1 个答案:

答案 0 :(得分:1)

因为它在GAC中查找了ReportViewer文件的重要DLL,其中还包括Microsoft.VisualStudio.Text.Logic DLL到包中。因此,除非找到丢失的DLL,否则它会显示错误。

尝试以下步骤将DLL添加到项目工具栏中:

  
      
  1. 程序包管理器控制台中运行以下命令:

    Install-Package Microsoft.ReportingServices.ReportViewerControl.Winforms -Version 140.340.80
    
  2.   
  3. 点击工具箱中的任意位置,然后选择选择项目...

  4.   
  5. .NET Framework组件上,单击浏览

  6.   
  7. 从您安装的NuGet包中选择 Microsoft.ReportViewer.WinForms.dll

  8.   
  9. 新控件应显示在工具箱中。然后尝试使用这个新的reportviewer发布您的项目。

  10.   

正如 Dmitry 的评论共享的link中提到的那样。