SSRS自定义程序集:生成错误添加netstandard

时间:2019-05-09 14:55:07

标签: c# reporting-services .net-assembly .net-standard

我在Visual Studio 2017社区版上有一个使用SQL的报告。我有一个自定义库程序集,该程序集用于从数据字段生成条形码作为图像。 该程序集需要DLL文件和Systems.Drawing程序集。我将它们都添加进去并输入了一些代码:

Public Function Convert(Text As String) As Byte()
       Dim b As System.Drawing.Bitmap
    '   Dim bar As New BarcodeLib.Barcode
       bar.Alignment = BarcodeLib.AlignmentPositions.TOPCENTER
       bar.IncludeLabel = False
       bar.RotateFlipType = Drawing.RotateFlipType.RotateNoneFlipNone
       b = bar.Encode(BarcodeLib.TYPE.CODE39Extended, Text, 400, 30)
       Dim bitmapData As Byte() = Nothing
       Using ms As New System.IO.MemoryStream()
           b.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp)
           bitmapData = ms.ToArray()
       End Using
       Return bitmapData
   End Function

请注意:栏是课程的参考名称

当我尝试使用或不使用条形码生成来预览或生成报告时,它会失败。 错误是:

[rsCompilerErrorInCode]自定义代码[VC30007]的第3行出现错误,要求装配包含基类System.Enum的netstandard .... net时需要引用。

[rsCompilerErrorInClassInstanceDeclaration]组装netstandard所必需的引用,其中包含默认类System.Object,将一个添加到您的项目中。

据我所知,您不能仅添加这些,因为SSRS似乎没有任何NuGet或程序包支持,因此我无法这样做。

我在服务器上几乎所有可能的位置列出了此条形码dll,我的程序文件,MSbuild,服务器上的Reporting Services bin文件夹,IDE公共和私有。 我确实尝试仅从MSBuild加载以获取程序集引用与程序集清单版本不匹配。即使它们是相同的。 我确实尝试在C#中编辑代码以包括for netstandard,即使该代码通过该项目上的nuget连接。

我期望图像使用= Code.Convert( TEXT )或= Code.Convert(databasefield)进行转换,但并没有达到目标。即使没有图像或未引用代码本身,也会首先生成构建错误。

2 个答案:

答案 0 :(得分:0)

使用相同的库BarcodeStandard.dll,我遇到了同样的错误。我出于自身的判断,使用“ hello world” .Net Standard库进行了测试,看来SSRS不支持.Net Standard库。 .Net Framework 4.6.2中等效的“ hello world”库在服务器上运行时没有任何问题。

我的解决方案是在.Net Framework 4.6.2中重写BarcodeStandard库;当部署在服务器上时,此解决方案对我们有效。在Visual Studio 2019中预览报表时仍然无法使用,但这是一个小问题。

编辑:在VS2019中进行预览或尝试在SSRS服务器上部署/运行报告时出现了“无法加载文件或程序集”错误,但在构建过程中却没有。 另外,不要忘记在报表中添加对System.Drawing v4.0.0.0的引用-这是条形码库所必需的。

答案 1 :(得分:0)

据我所知,在某些时候,开发人员更改了对 .NET Standard 的引用,我也无法在报告中找到引用它的方法。 @Fgaudet 的好主意,用 .NET Frameword 4.6.2 重写它以便在 SSRS 中使用。 过去我使用旧版本的 BarcodeLib - 2.2.5,它仅适用于 System.Drawing v2.0.0.0 参考。

顺便说一句。如果在VS2019中无法预览报表,请尝试将.dll放入

<块引用>

c:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\PrivateAssemblies\

以及

<块引用>

c:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\SSRS\