我有一个非常简单的使用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函数引用的文本框,则报表将成功部署到服务器。因此,虽然消息中没有关于报告无效的原因的更多信息,但它似乎与服务器上的自定义程序集相关联。
以下是我的尝试:
上述努力都没有奏效。
我可以共享可能有助于识别问题的RDL文件或其他材料,但我不认为该问题与报告定义有关,因为如果删除了对自定义程序集中的函数的引用,则将部署报告。我不相信自定义程序集的问题,因为预览在VS2017环境中工作。必须与服务器有关,但错误消息非常不透明。
这是我第一次联系SO社区。我一般都很保守,有点犹豫。然而,其他人的经验对于克服过去的发展挑战证明是有价值的,我很感激。但这次我真的很难过。似乎没有人能够找到我能找到的确切经验,而且我已经详尽地搜索过了。如果解决方案变成一个简单的疏忽或一些值得嘲笑的基本无知,我几乎不担心。我只需要一个对其他人来说似乎没有问题的解决方案。
答案 0 :(得分:1)
请参考以下URL作为解决方案:
将自定义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