繁体   English   中英

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

[英]SSRS 2016 Custom Assembly Deployment Not Working

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

下面是这个“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 社区。 我通常是保留的,有些犹豫。 然而,事实证明,其他人的经验对于克服过去的发展挑战很有价值,我很感激。 但是这次我真的被难住了。 似乎没有人有过这种我能找到的确切经验,而且我已经进行了详尽的搜索。 如果解决方案结果是一个简单的疏忽或一些值得嘲笑的基本无知,我几乎不担心。 我只需要一个对其他人来说似乎不是问题的解决方案。

参考以下网址解决:

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

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

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

对我来说,问题是 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM