【发布时间】:2017-07-21 17:14:31
【问题描述】:
我有一个使用 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 社区。我通常很保守,有点犹豫。然而,其他人的经验已证明对过去的发展挑战很有价值,我很感激。但这一次我真的很难过。似乎没有人有过这种我能找到的确切经验,而且我已经详尽地进行了搜索。如果解决方案被证明是一个简单的疏忽或一些值得嘲笑的基本无知,我几乎不担心。我只需要一个对其他人来说似乎不是问题的解决方案。
【问题讨论】:
-
这很难。您是否仔细阅读了此处列出的完整步骤:mssqltips.com/sqlservertip/3224/… 似乎还有一些额外的项目需要检查,如果您通过报告管理器而不是 Visual Studio 上传报告会发生什么?
-
@Jesse - 感谢您的建议。该链接是已知的,并且是用于尝试上面提到的组装安全步骤的材料。我将尝试在星期一通过报告管理器加载并报告回来。退一步说,我认为某个地方的某个人拥有在我们的环境中运行的自定义程序集。
-
@Jesse - 由报告管理器上传有效。 VS2017 的部署机制不能正确考虑自定义程序集。谢谢。是否有一种机制可以将问题解决归功于评论?
-
很高兴它成功了。好奇部署是怎么回事,我想知道它是否使用了您系统中的另一个 BIN 文件夹或其他东西。我可以添加我的答案作为答案。
-
我的处境完全一样。尝试了很多东西。该报告确实有效,并且在 VS 之外手动部署该报告在服务器上运行良好。是VS2017中的项目本身错误地认为报表定义无效。这很烦人,虽然手动部署是一项有效的工作,但与项目部署相比,它提供了很多额外的工作。为了记录和其他人以后发现这一点,我将 VS2017 与 SQL Server 2017 一起使用。
标签: c# sql-server reporting-services .net-assembly