【问题标题】:SSRS custom assembly: build error add netstandardSSRS 自定义程序集:构建错误添加 netstandard
【发布时间】:2019-05-09 14:55:06
【问题描述】:

我有一份在 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

请注意:Bar 是类的参考名称

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

[rsCompilerErrorInCode] 自定义代码第 3 行出现错误 [VC30007] 组装 netstandard 需要引用 .... 包含基类 System.Enum 向您的项目添加一个。

[rsCompilerErrorInClassInstanceDeclaration] 组装 netstandard 所需的参考,包含命令类 System.Object 向您的项目添加一个。

据我所知,您不能只添加这些,因为 SSRS 似乎没有任何 NuGet 或包支持来允许我做这样的事情。

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

我希望图像可以使用 =Code.Convert(TEXT) 或 =Code.Convert(databasefield) 进行转换,但它还没有到这一步。即使没有图像或对代码本身的引用,构建错误也会首先生成。

【问题讨论】:

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


    【解决方案1】:

    我刚刚遇到了同样的错误,使用了完全相同的库 BarcodeStandard.dll。为了我自己的理智,我使用“hello world”.Net 标准库进行了测试,似乎 SSRS 不支持 .Net 标准库。 .Net Framework 4.6.2 中的等效“hello world”库在服务器上没有任何问题。

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

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

    【讨论】:

      【解决方案2】:

      据我所知,在某些时候,开发人员更改了对.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\

      【讨论】:

      • 嗯...所以我在 GitHub 上检查了旧版本,但即使是 2.2.5 也引用了 .netstandard。可能我过去也重写了它,但我忘记了它?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      相关资源
      最近更新 更多