c# - SSRS 2016自定义程序集部署不起作用

标签 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社区。我通常有所保留,有些犹豫。然而,其他人的经验证明对克服过去的发展挑战非常有价值,我对此深表感谢。但是这次我真的很沮丧。似乎没有人拥有我可以找到的这种确切经验,并且已经进行了详尽的搜索。如果解决方案只是一个简单的疏忽或一些基本的无知而值得嘲笑,我一点也不担心。我只需要一个对他人来说似乎不是问题的解决方案。

最佳答案

一种有效的解决方案是使用报表管理器添加报表,而不是从Visual Studio进行部署。

关于c# - SSRS 2016自定义程序集部署不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45243242/

相关文章:

asp.net - 访问报表服务器时出现 AppPool 权限问题

c# - .Net 中可用的并行技术

c# - 在 C# 中修改 ComboBox SelectedIndex 而不触发事件

sql-server - Sql 服务器表分区 - 我可以跨服务器分配表吗?

sql - 删除单个人的 SSRS 安全性

asp.net - 报告 Mozilla 中的查看器宽度问题

c# - Swashbuckle 自动向生成的 Swagger 文件添加 200 OK 响应

c# - 如何以编程方式设置动态创建以嵌入到 TableLayoutPanel 中的控件的 Column 和 Row 属性?

sql-server - Kubernetes中的dotnet核心Pod连接到本地SQL Server

sql-server - 计算数据库备份大小