SSRS 2016自定义程序集部署无法正常工作

时间:2017-07-21 17:14:32

标签: c# sql-server reporting-services .net-assembly

我有一个非常简单的使用VS2017用C#编写的自定义程序集,该程序集部署到在Windows 10机器上运行SQL Server 2016(SP1-CU3)(KB4019916)的Microsoft SQL Server Reporting Services版本13.0.4435.0。

以下是此“Hello World”自定义程序集的C#代码:

Namespace MyCustomAssembly
{
    public class HellowWorldClass
    {
        public static string HellowWorld()
        {
            return "Hello World!";
        }
    }
}

Microsoft介绍了部署自定义程序集的分步过程:

https://docs.microsoft.com/en-us/sql/reporting-services/custom-assemblies/deploying-a-custom-assembly

按照流程中的步骤,我发现的第一件事是报表设计器默认目录不同。尝试各种文件夹后,可以使用的目标是:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\SSRS

在此目录中存放自定义程序集DLL后,报表预览按预期工作。这提供了验证报告文本框中的表达式是否已正确定义的验证。

根据该过程,要在服务器上部署自定义程序集,DLL应放在以下目标中,并针对特定SSRS版本进行调整:

C:\Program Files\Microsoft SQL Server\MSRS13.MSSQLSERVER\Reporting Services\ReportServer\bin

然后,该过程描述了扩展自定义程序集权限的步骤,但是这个简单示例不应该要求。执行许可应该足够。因此,不必修改rssrvpolicy.config。

当我尝试通过右键单击VS2017的解决方案资源管理器中的报告并选择“部署”将报告部署到服务器时,我收到以下消息(仅此文本):

The definition of the report '/HelloWorldReport' is invalid.

如果删除包含自定义程序集中HelloWorld函数引用的文本框,则报表将成功部署到服务器。因此,虽然消息中没有关于报告无效的原因的更多信息,但它似乎与服务器上的自定义程序集相关联。

以下是我的尝试:

  • 尽管根据流程不需要,但我继续编辑rssrvpolicy.config以向程序集授予“FullTrust”。重启服务器。
  • 我读到SSRS基于.NET 3.5(我使用4.5.1构建了程序集),并且需要在.NET 3.5上构建库才能工作。自定义程序集构建已更改为使用.NET 3.5。
  • 确保在服务器上安装了.NET 3.5(以及依赖项.NET 3.0和2.0)。这是一个很长的镜头。
  • 审核了有关自定义程序集的创建和部署的各种其他教程和视频。似乎所有这些都表明在这种情况下所需的只是将DLL放置在服务器上的正确目录中。
  • 将自定义程序集DLL复制到服务器上的各种其他目录中。想到的是,如果VS2017出错,那么服务器目录也可能出错。
  • 我研究了装配安全性。经历了DLL的签名过程。使用gacutil将自定义程序集安装到GAC中。
  • 在另一个绝望的努力中,我在服务器上安装了VS2017社区,并在服务器上创建了一个简单的报告和自定义程序集。与以前一样,VS2017报告预览正确呈现,服务器部署失败。

上述努力都没有奏效。

我可以共享可能有助于识别问题的RDL文件或其他材料,但我不认为该问题与报告定义有关,因为如果删除了对自定义程序集中的函数的引用,则将部署报告。我不相信自定义程序集的问题,因为预览在VS2017环境中工作。必须与服务器有关,但错误消息非常不透明。

这是我第一次联系SO社区。我一般都很保守,有点犹豫。然而,其他人的经验对于克服过去的发展挑战证明是有价值的,我很感激。但这次我真的很难过。似乎没有人能够找到我能找到的确切经验,而且我已经详尽地搜索过了。如果解决方案变成一个简单的疏忽或一些值得嘲笑的基本无知,我几乎不担心。我只需要一个对其他人来说似乎没有问题的解决方案。

3 个答案:

答案 0 :(得分:1)

请参考以下URL作为解决方案:

https://developercommunity.visualstudio.com/content/problem/574712/rdl-deploy-error-vs-2017-ssrs-2017.html

将自定义DLL复制到开发人员计算机上的此文件夹C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\PrivateAssemblies

答案 1 :(得分:0)

一个有效的解决方案是使用Report Manager添加报表,而不是从Visual Studio部署。

答案 2 :(得分:0)

遇到了与此处所述相同的问题。

对我来说,问题在于DLL必须位于部署报告的计算机上的两个文件夹中:

要使DLL在开发过程中正常工作,

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7
\IDE\CommonExtensions\Microsoft\SSRS

并能够部署报告:

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7
\IDE\PrivateAssemblies

当然,在服务器上,DLL也必须位于ReportServer\Bin文件夹中

此外,我已经看到有关程序集必须是.NET 4.0的帖子,但对我而言并非如此……我的是3.5