SSRS 2016 自定义程序集部署不工作
SSRS 2016 Custom Assembly Deployment Not Working
我有一个使用 VS2017 用 C# 编写的非常简单的自定义程序集,它正在部署到 Microsoft SQL Server Reporting Services Version 13.0.4435.0 运行 SQL Server 2016 (SP1- CU3) (KB4019916) 在 Windows 10 盒子上。
下面是此 "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 Studio17\Professional\Common7\IDE\CommonExtensions\Microsoft\SSRS
将自定义程序集 DLL 存放在此目录中后,报表预览按预期工作。这验证了报告文本框中的表达式是否已正确定义。
根据流程,要在服务器上部署自定义程序集,DLL 应放置在以下目标位置,针对特定 SSRS 版本进行调整:
C:\Program Files\Microsoft SQL Server\MSRS13.MSSQLSERVER\Reporting Services\ReportServer\bin
该过程然后描述了扩展自定义程序集权限的步骤,但这个简单的示例不应该要求这样做。执行权限应该足够了。因此不需要修改rssrvpolicy.config。
当我尝试通过右键单击 VS2017 的解决方案资源管理器中的报告并选择 "Deploy" 将报告部署到服务器时,我收到以下消息(并且只有此文本):
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 报表预览显示正确,服务器部署失败。
None 上述努力奏效了。
我可以共享 RDL 文件或其他 material 可能有助于确定问题的文件,但我认为问题不在于报告定义,因为如果引用其中的函数,报告将部署自定义程序集已删除。而且我不认为问题出在自定义程序集上,因为预览在 VS2017 环境中工作。必须与服务器有关,但错误消息非常不透明。
这是我第一次接触 SO 社区。我通常很保守,有些犹豫。然而,事实证明,其他人的经验对于克服过去的发展挑战很有价值,我对此表示感谢。但是这次我真的难住了。似乎没有人有过我能找到的这种确切经历,而且我已经进行了详尽的搜索。如果解决方案最终是一个简单的疏忽或一些值得嘲笑的基本无知,我并不担心。我只需要一个对其他人来说似乎不是问题的解决方案。
一个有效的解决方案是使用 Report Manager 添加报告而不是从 Visual Studio 部署。
参考以下URL解决方法:
将自定义 DLL 复制到开发人员计算机上的此文件夹 C:\Program Files (x86)\Microsoft Visual Studio19\Professional\Common7\IDE\PrivateAssemblies
。
刚刚遇到与此处所述相同的问题。
对我来说,问题是 DLL 必须位于部署报告的机器上的两个文件夹中:
为了 DLL 在开发期间工作:
C:\Program Files (x86)\Microsoft Visual Studio19\Community\Common7
\IDE\CommonExtensions\Microsoft\SSRS
并能够部署报告:
C:\Program Files (x86)\Microsoft Visual Studio19\Community\Common7
\IDE\PrivateAssemblies
当然在服务器上 DLL 也必须在 ReportServer\Bin
文件夹中
此外,我看到过有关程序集必须是 .NET 4.0 的帖子,但对我来说情况并非如此......我的是 3.5
我有一个使用 VS2017 用 C# 编写的非常简单的自定义程序集,它正在部署到 Microsoft SQL Server Reporting Services Version 13.0.4435.0 运行 SQL Server 2016 (SP1- CU3) (KB4019916) 在 Windows 10 盒子上。
下面是此 "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 Studio17\Professional\Common7\IDE\CommonExtensions\Microsoft\SSRS
将自定义程序集 DLL 存放在此目录中后,报表预览按预期工作。这验证了报告文本框中的表达式是否已正确定义。
根据流程,要在服务器上部署自定义程序集,DLL 应放置在以下目标位置,针对特定 SSRS 版本进行调整:
C:\Program Files\Microsoft SQL Server\MSRS13.MSSQLSERVER\Reporting Services\ReportServer\bin
该过程然后描述了扩展自定义程序集权限的步骤,但这个简单的示例不应该要求这样做。执行权限应该足够了。因此不需要修改rssrvpolicy.config。
当我尝试通过右键单击 VS2017 的解决方案资源管理器中的报告并选择 "Deploy" 将报告部署到服务器时,我收到以下消息(并且只有此文本):
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 报表预览显示正确,服务器部署失败。
None 上述努力奏效了。
我可以共享 RDL 文件或其他 material 可能有助于确定问题的文件,但我认为问题不在于报告定义,因为如果引用其中的函数,报告将部署自定义程序集已删除。而且我不认为问题出在自定义程序集上,因为预览在 VS2017 环境中工作。必须与服务器有关,但错误消息非常不透明。
这是我第一次接触 SO 社区。我通常很保守,有些犹豫。然而,事实证明,其他人的经验对于克服过去的发展挑战很有价值,我对此表示感谢。但是这次我真的难住了。似乎没有人有过我能找到的这种确切经历,而且我已经进行了详尽的搜索。如果解决方案最终是一个简单的疏忽或一些值得嘲笑的基本无知,我并不担心。我只需要一个对其他人来说似乎不是问题的解决方案。
一个有效的解决方案是使用 Report Manager 添加报告而不是从 Visual Studio 部署。
参考以下URL解决方法:
将自定义 DLL 复制到开发人员计算机上的此文件夹 C:\Program Files (x86)\Microsoft Visual Studio19\Professional\Common7\IDE\PrivateAssemblies
。
刚刚遇到与此处所述相同的问题。
对我来说,问题是 DLL 必须位于部署报告的机器上的两个文件夹中:
为了 DLL 在开发期间工作:
C:\Program Files (x86)\Microsoft Visual Studio19\Community\Common7
\IDE\CommonExtensions\Microsoft\SSRS
并能够部署报告:
C:\Program Files (x86)\Microsoft Visual Studio19\Community\Common7
\IDE\PrivateAssemblies
当然在服务器上 DLL 也必须在 ReportServer\Bin
文件夹中
此外,我看到过有关程序集必须是 .NET 4.0 的帖子,但对我来说情况并非如此......我的是 3.5