Aspnetcore: Asp.Netコアレポート(SSRS)

作成日 2016年06月02日  ·  269コメント  ·  ソース: dotnet/aspnetcore

ASP.NET Coreアプリに取り組んでいますが、SSRSレポートを表示するためのソリューションが見つかりません。 「Microsoft.Reporting.WebForm」がない場合は機能しなくなります。 ASP.NETCoreでWeb上にSSRSレポートを表示するためのベストプラクティスは何ですか

External

最も参考になるコメント

ほぼ2年。 Core2.0がリリースされました。 SSRSチーム、起きて。

全てのコメント269件

CoreはまだRC(月末までにRTM)にあるため、SSRSシナリオが今後6か月以内に計画されているとは思いませんが、私はチームの一員ではありません。

いくつかのJavaScriptライブラリを使用してクライアント側でこれらのレポートを生成するか、これらのレポートを事前に生成します。

より「統合された」ものが必要な場合は、次のコミュニティパッケージを確認できます。

https://github.com/ilich/MvcReportViewer

問題https://github.com/ilich/MvcReportViewer/issues/121を見ると、彼らはそれを統合することに興味を持っていますが、これまでのところ成功していません。

dotnetとASP.netのコアイニシアチブが以前のすべての発表でこの問題について沈黙している理由がわかりません。 のような
[レポートは開発者にとって大きな関心事ではなく、htmlとprintcssクラスを使用して対処できます]
現在、多くのssrs rdlcファイルを含む小さなERPを移行しており、cssアプローチはクロスブラウザーレポートでは何の役にも立ちません。
一方、先週、マイクロソフトは、ActiveXインストールの必要性を排除した純粋なhtml5ビューアを備えたssrs 2016をリリースしました[これは、非IEブラウザでssrsを使用することの唯一の欠点でした]
ssrs2016ビューアはasp.netコアエコシステムに完全に適合します
しかし、asp.netコアサポートに関する公式声明は宣言されていません。

System.Drawingによってすべてブロックされていますか? itextsharpでさえ今までライブラリをリリースしていなかったからです。
System.Drawingの場合、System.Drawingの完全なクロスプラットフォーム実装を待つ代わりに、現在のWindows開発者の採用を増やすために、少なくともWindowsの実装を[linuxおよびOSX]の前に完了することができます。

この投稿により、チームがasp.netコア内でssrsを有効にするためのいくつかの優先順位を再検討するようになることを願っています

以前の投稿で言及されたMvcReportViewer(これはwebformsビューアのラッパーです)に関して、これは過去の多くのmvc開発者がmvc1からmvc5のmvcレポートビューアの欠如を克服するのに役立ちました[ありがとうございました]、私は見たいと思っていますssrsはファーストクラスの優先事項ではなく、人々はプレコアMVCでそれについてかなり維持していたため、完全なソリューションです。

開発者にお願いします、
この問題についてコメントするには、この問題を同僚に転送してください。
これはそれを優先し、チームに何かをする動機を与えるかもしれません。

@ ddddddddeee22211それはV1です。

最初はSSRSサポートが付属していません。 SSRSによるサポートは、おそらく.NETチームではなくSSRSチームから提供されます。 私たちはまだRCを使い果たしていないので、これをV1の重要な機能とは考えていません。

レポートを作成する必要がある場合は、Webフォームバージョンを実行することをお勧めしますか? ええ。 古いです。 しかし、少なくともそれは機能し、サポートされています。

X-Platレポートが必要な場合は、 Chartistのようなものをお勧めします。 これにより、クライアント上で直接チャートを生成できます。 印刷目的とブームのためにCSSファイルを追加します。 印刷可能なレポートがあります。

あなたの観点からは、それは重要ではないかもしれません
しかし、他の開発者の中には、アプリを開発して稼働させると、開発タスクが保留になり、レポートタスクが日常のタスクになるため、プロジェクトにとって非常に重要であると考えている開発者もいます。 また、一部のプロジェクトは、ssrsの使用方法は知っているが、asp.netコアについては知らないBI(ビジネスインテリジェンス)チームへのレポート作成を処理します。

私の投稿の目的は、asp.netコアエコシステム内のssrsの位置を理解することでした。 または、mvc1からmvc5のように無視される場合。 ssrsチームはマイクロソフト内にあり、asp.netコアチームが問題について話し合う場合があります。
私を夢中にさせたのは、先週、asp.netコアについて何も言及せずにssrs2016リリースノートを見たときでした。 一方、asp.net core.believe内で紺碧の継続的なサポートが見られますが、ssrsの需要が増加しなかった場合は、前のmvc5のように無視されます。

Webフォームの使用に関するアドバイスは、コアイニシアチブの採用を遅らせることに関する例です。少なくとも、サポートされるかどうかについての声明があれば、戦略的な決定を下すことができます。

チャットのヒントをありがとう。 私はそれをチェックします、そしてあなたが私の見解を理解したことを願っています。

@ ddddddddeee22211ああ...それなら、私は答えることができません。

現在、SSRSコンポーネントをASP.NETで機能させる唯一の方法は、WebFormsを使用することです。

彼らの戦略的立場が必要な場合、または彼らがそれをサポートする場合は、MS従業員が回答するのを待つ必要があります。

たぶん/ cc @coolcshできますか? 彼はここで答えないかもしれませんが、位置を明確にするブログ投稿がいいでしょう。

SSRSチームでは、ASP.NET WebFormsの制限を認識しており、レポートビューアーコントロールの新しいオプションを積極的に調査して取り組んでいます。
ありがとう

@jtarquino

返信してくれてありがとう!

MVC以来、代替手段が必要でした。 :stuck_out_tongue_winking_eye:

それはちょうど私の日を作りました。 [〜ハッピーエンド〜]
@ jtarquino@ MaximRouillerのすべての努力に

@jtarquino
それはいいです :-)

レポートビューアコントロールの「新しいオプション」の最初のバージョンをリリースするためにexpextを行う時期について何かお話しいただけますか?
(これに関するロードマップ/計画はありますか?)

Br。
ボーイ

残念ながら、現時点で共有できるタイムラインはありません

パッケージマネージャーコンソールにパッケージをインストールしてライブラリを使用し、コマンドウィンドウに次のコマンドを入力してみましたか。

PM>インストール-パッケージReportViewerForMvc
私はウェブフォームを試しましたが、かなり見栄えがします。

untitled

@bethwellagat
再度エラーが発生します "依存関係ReportViewerForMvcはフレームワーク.NetCoreappをサポートしていません"
ノート:
ASP.NETCoreプロジェクトに取り組んでいます

@jtarquinoがこれにpingをhttps

@jtarquinoところで、私のチームとの話し合いを始めたい場合は、私にメールしてください。チャットできます。

ああ、好きだ! ボールが転がっています! 😀

みなさん、SSRSに組み込まれているReportExecutionService.asmxを使用して、レポートビューアコントロールのカスタムポートを作成し終えたところです。ASP.NETMVCをターゲットにしていました。 誰かに.NetCoreとMVCへの移植を提案してもらったので、それを完了しました。 試してみて、皆さんの考えを教えてください: https

アラン

ASP NetcoreMVCのReportViewerについてここで説明してから約3か月が経過したようです。 WinFormsからnetcoreに移行するプロジェクトでAlanJudenが提供したバージョンを使用しています。 マイクロソフトがファーストクラスのSSRSReportViewerサポートを提供するためにステップアップしている兆候はありますか、それとも数年前にVisual FoxProを置いたのと同じクローゼットにSSRSを入れましたか?

進捗MSはありますか? 現時点での最善のオプションは、ブラウザのレンダリングにTelerik Reports、レポートサブスクリプションにSSRSバックエンドなどのサードパーティツールを使用することです。 たぶんddddddddeee22211が書いたように、SSRS 2016にはすでにHTML5レンダリングエンジンを介した機能がありますが、ドキュメントはありませんか?

ねえ@Eilon。

9月以降のニュースはありますか? 特に、1.0をリリースしたので(おめでとうございます!)、プレッシャーは少し下がるはずです。

共有できるものはありますか?

/ cc @jtarquino

まだ共有できることは何もありません。.NETCoreのニュースがあり次第、あなたが最初に知ることになります。
おっしゃるように、ASP.NETWebフォームとWinformsコントロールの最新のNugetをリリースしました

チームにもプロンプトを追加したいと思います...これは大きな問題です。 AlanJudenのソリューションに感謝しますが、「公式の」ソリューションが必要です...コア1が数か月間リリースされていることを考えると、この状況について少しお話しいただければ助かります。 あなたが私たちに何かになる解決策のタイムラインについての言葉を得ることができれば。 この問題は十分に大きいため、mvcコアを使用できなくなります。 1つのメモ。 ユーザーがssrsサーバーにログインする必要性を回避するソリューションが本当に必要です。 これが、私のプロジェクトが現在のreportviewerを使用する必要がある理由です(reportviewerを使用すると、mvcプロジェクトがすべてのユーザーにssrsサーバーへの標準ログインを提供します)

SQL Server2017はコミュニティプレビュー2になりました
そして
.net標準2.0リリースは最新の発表で終わります
そして、ネイティブasp.netコアレポートサービスビューアにはまだ何も書かれていません
他の開発者をこの問題に招待してフィードバックを提供し、すべての開発者が夢見ている傑作フレームワークのためのそのような努力の必要性をチームに認識させてください。

@jtarquino :SSRSのフォーラムまたはユーザーボイスはありますか?
ユーザーはどのようにしてSSRSチームに連絡できますか?

はい、フォーラムは
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/home?forum=sqlreportingservices
また、私たちのブログをチェックすることができます
https://blogs.msdn.microsoft.com/sqlrsteamblog/

おかげで、私は本当に私の新しいアプリをSSRSで動作させるためにいくつかの助けを得たいと思います。
aspxページを引き裂くためにWebフォームコントロールで使用されるコードを取得する方法はありますか?
Webフォームコントロールの「ように機能する」および「似ている」角度2ビューを作成できるかどうかを確認したいと思います。

こんにちは、

一部のWebサイトなどをasp.netコアに移行することを検討していますが、一部にはSSRSレポートビューアーコントロールが含まれています。 .net Coreのレポートビューアコントロールに進展はありますか?

ありがとう
ティム

.NETCoreではなくFull.NET 4.xを対象としている場合は、ASP.NET Coreに移行する前に、この#2022を考慮してください。
ASP.NET Core2はFull.NET4.xをサポートしません

@ikourfaln。 むしろ、この段階では、asp.netコアに中断するreportviewerがないことを確認する必要があります。 asp.netコア2および.netフレームワークをターゲットにできる互換性シムを備えた.net標準2の第3四半期に予定されている変更により、Microsoftが現在のasp.netコアのレポートビューアーを作成する可能性は非常に低いと思います。 1.1。

現在、SSRSの認証拡張機能を利用しようとしましたが、変更を試みるのが非常に面倒であることがわかりました。新しい認証/ログインを入力できますが、CORSを有効にしてWebアプリがSSRSを呼び出せるようにしようとするとレポートを実行するために、ブラウザはOPTIONSプリフライトリクエストを取得できず、それでアイデア全体が終了します。

だから今、私はOpenId Connectサポートを追加しているWebフォームWebアプリを作成しているので、光沢のある新しいAngularアプリとレポートの間でSSOを機能させることができます

次に、iframeハッカーやその他の手段でそれらをどのように組み合わせることができるかを確認します。

マイクロソフトが新しいウェブ技術でより良く遊ぶためにssrsを更新することを望みます。

別の考え方:SSRS KPIとモバイルレポート:Webアプリでそれらを使用する方法はありますか?

@alanjuden rdlcレポートのレンダリングを有効にするようにパッケージを構成する機会はありますか? Reporting Serverをインストールし、クライアントごとに管理するのは非常に面倒です。

@IonRobu 、私はクレイジーかもしれません...しかし、私はそれほどクレイジーではありません! :P

それをしない本当の理由は、レポートビューアのフロントエンドビューアのみを作成したためです。 レポートのレンダリングとSSRSAPIを介したレポートデータの返送は、SSRSに完全に依存しています。 したがって、レポートサーバーのバックエンドが必要です。 申し訳ありませんが、それは私がこのプロジェクトでやろうとしているよりもはるかに多くの作業になるでしょう。 MvcReportViewerは、ASP.NETWebFormsバージョンのコントロールを導入する際の問題を回避するための簡単なソリューションとして作成しました。

「クライアントレポート」と呼ばれるレポートサーバーまたはRDLC
レポートサーバーは、セットアップと管理にさらに手間がかかります。そうです。
しかし、それにはいくつかの利点があります。

レポートはバックエンドサーバーでレンダリングされ、フロントエンドWebサーバーの作業負荷を軽減します。
レポートの結果はキャッシュでき、プロダクションSQLサーバーの作業負荷を軽減できます。
複雑なレポートはスケジュールに従って実行でき、システムにユーザーがほとんどいないときに機能します。
その後、そのプリコンパイルされたスナップショットからリクエストを処理できます。
また、SSRSを使用すると、SQLサーバーの接続文字列はレポートサーバーに残り、Webサーバーの構成ファイルで管理する必要はありません。
また、SSRSサーバーは、レポート作成者が公開できる中心点になり、すべてのユーザーがサーバーからレポートを取得できます。
SSRSは、ユーザーへのレポートの自動電子メール送信を設定できます。一部のユーザーにはレポートサーバーへのリンクを電子メールで送信し、他のユーザーにはpdf、word、またはExcelファイルを電子メールで送信できます。

また、スケールアップします。より多くのユーザーにサービスを提供する必要がある場合は、レポートサーバーを追加する前に、Webサーバーを追加する必要があります。その場合、多数のrdlcファイルをすべてのWebサーバーにコピーする必要はありません。

ですから、レポートが少なく、rdlcで利用できるメリットが必要ない場合はそうです。
しかし、多くのユーザーに多くのレポートを提供する必要がある大規模なシステムの場合、SSRSサーバーにはいくつかの非常に優れた利点があります。
また、SSRS apiは非常に強力に機能するため、apiを呼び出して、たとえばクライアント側のWebフォームやMVCビューアコントロールを必要とせずにレポートpdfを返すことができます。
APIは、レポートの管理、サーバーへのアップロード、権限の設定、レポートの一覧表示もできます。
職場では、APIを使用して、クライアントアプリがユーザーが実行できるレポートを一覧表示し、レポートに必要なパラメーターを確認してから、ユーザーのレポートを実行できるようにしています。

したがって、管理オーバーヘッドだけでなく、利点もよく見てください。

@figuerres
クライアントレポートは、説明したものとは異なるコンテキストで優れています
多くのクライアントはレポートサーバーを使用せず、問題を管理および維持するための資格のある担当者がいません。
また、クライアントごとにカスタマイズされたレポート(60以上)を含む製品を出荷する場合、アプリケーションの展開+レポートの展開のオーバーヘッドに直面します。
多くのユーザーは、サーバーによって生成され、最初にプレビューせずに応答ごとにレンダリングされたレポートを理解できる技術者ではありません(たとえば、請求書は、複数の修正された請求書を異なるタブにダウンロードするよりも、ビューアを介して簡単に確認できます)

ご覧のとおり、ユーザーは複雑なシナリオよりも単純なレポートビューアに簡単に適応できます。
また、クライアントレポートを作成するために数え切れないほどの労力を費やして開発され、今では実際の使用法では役に立たなくなっています。

Microsoftチームが私たちの痛みを理解してくれることを願っています

あなたの言ったことをすべて理解できるかどうかはわかりませんが、クライアントのレポートは役に立ちます。サーバーの理由、なぜそれを見る価値があるのか​​を概説しただけです。 あなたのマイレージは変わるかもしれません。

今日、net standard 2がリリースされ、system.drawingのAPIサーフェスが増えました。
これは、asp.netコアのssrsビューアについてsrssチームからの言葉のチャンスでしょうか?

私の会社は、PDF形式のRDLCレポートエクスポートドキュメントに大きく依存しています。 .netコアでこれを実行できないことは、基本的に.netコアを使用し、dockerなどの他のプラットフォームで実行することを妨げるものです。

私はすべてのコーダーから彼/彼女の同僚がこの問題についてここにコメントすることを奨励することを願っています

まだ解決策を探している人のために:
Javaがインストールされている場合は、代わりにEclipseBIRTまたはJasperReportsを埋め込むこともできます。
2つのうち、JasperReportsは間違いなく最良のSSRSの代替手段です(もう少し複雑ですが、はるかに強力でピクセルパーフェクトです)。
スタンドアロンの埋め込み可能なレポートサーバーがあり、任意のJDBCデータソースにアクセスできます。また、CassandraやApache Spark(SparkSQL)などのビッグデータにもアクセスできます。

Webまたはモバイルアプリケーションに組み込むことができるレポートと分析を提供するだけでなく、ミッションクリティカルな情報をリアルタイムまたはスケジュールベースでブラウザ、モバイルデバイス、または電子メールの受信トレイに配信することにより、企業の中央情報ハブとして機能します。さまざまなファイル形式で。

Launch4jを介してBIRT / Jasperを提供することにより、Javaランタイムの自己完結型のデプロイメントを行うことができます。

@jtarquino .Net Coreに朗報はありますか?

それが提起されてから約15か月後、これがまだ問題であるとは信じられません。 すごく失望した。

SSRS、ReportName、Paramsの単純なポイントでさえ、DIVなどで開くには、これが機能する必要があります。 SQLでSSRSレポートを直接作成することに多くの時間を費やしてきましたが、単純なCore2.0MVCアプリケーションでそれらを表示する方法が必要です。

任意のヒント?

@cgountanis 、これは私のために働きます:
https://github.com/aspnet/Home/issues/1528#issuecomment -259169426

@cgountanis
レポートのPDFまたはWebポータルショーのような完全なインタラクティブレポートが必要ですか?

Angularアプリからどのようにそれらを行うかについていくつかのスターターを与えることができます

これが私がしていることです。 ほとんどの場合は機能しない可能性があるクライアントの資格情報を使用します。
ページのサイズを大きくすると機能しますが、小さくなりません。


<strong i="7">@model</strong> string

@{
    ViewData["Title"] = "View Report";
}

<style>
    body {
        overflow-x: hidden;
    }
</style>

@{
    var src = "http://192.168.0.1/ReportServer/Pages/ReportViewer.aspx?/";
    src += ViewData["argument"];
}

<iframe style="overflow:hidden; overflow-x:hidden; overflow-y:hidden; border:none; width:100%; height: 1250px;" src=@src></iframe>

1つは、レポートサーバーのWebサービスを使用することです。これらのサービスから、レポート、フォルダー、データソースなどのリストを取得し、そのデータを使用して独自のポータル/レポートメニューを作成し、ユーザーが表示できるレポートを管理できます。あなたのアプリ。
レポートサーバー上に一連のWindowsユーザーを作成し、それらを使用して、取得するレポートを制限しました。
アプリケーションユーザーの役割をレポートサーバーユーザーにマップしました。

レポートを実行するときは、レポートを実行しているユーザーとしてレポートサーバーユーザーを渡します。これは、コードにログインしない限り、「実際のユーザー」を失うことを意味します。
しかし、それはレポートサーバーのWindowsユーザーアカウントへの依存を扱っています。 彼らがjwtトークンを使用するように更新し、トークンからロールを取得する場合は、状況が改善されます。

iframeを使用して、Webフォームコントロールを角度のあるアプリビューに配置します。これも最適ではありませんが、機能します。
ユーザーは、私たちが行っている舞台裏のハッキングを実際に見ることはできません。

@ ctrl-brk Core 2.0でこの問題が発生しています。何かを見逃した可能性がありますが、 https://github.com/alanjuden/MvcReportViewer/issues/43

@steelwilありがとうございますが、カスタムNetworkCredentialが必要です。

@figuerresファイアウォールで。WebFormアプリケーションは、Windowsユーザーだけでなく、SSRS.ReportViewerですべてのハードワークを実行しました。 ただし、合意されたJWTがあれば便利です。 WebForms / NUGETで使用していたReportViewer機能と一致させようとすると、例はすばらしいでしょう。

皆さんありがとう!

最終的に、彼らはこの権利の公式NUGETをリリースしますか?

@cgountanis 「彼ら」はASP.NETCoreチームではありません。 そこに問題があります。 別のチームです。

@giddevここでの本当の質問は、あなたが参照しているこの他のチームが実際にMicrosoftにまだ存在し、チームでまだ働いているアクティブな開発者がいるかどうか、そしてSSRSを埋め込むためのファーストクラスのソリューションを作成して公開するのに十分な誇りを持っているかどうかです。 ASP.Net Core1または2Webアプリケーションにレポートします。 ロードマップは公開されていますか? ASP.Net Coreは計画の一部ですか、それともSSRSは廃止され、POWER BIのものに置き換えられましたか? SSRSがMicrosoftVisualFoxProが陥ったのと同じネズミの穴に向かっている兆候が見え始めています。

@wqwalterそのようなもの.....
マイクロソフトには、それぞれが独自のマップに従う多くのチームへの道があり、チーム間で共通の成果物とコミュニケーションのセットがあることを確認している人はあまりいないという印象を受けます。
それは猫番のようなもので、彼らはすべて異なる方向に離陸します...。

それが間違っている場合-まあそれはそのように思われます。

Crystal Reportsが人気を失った現在、SSRSは開発者によって頻繁に使用されているため、SSRSを放棄するとは信じがたいです。

@cgountanis
マイクロソフトのいくつかのものが好きなだけでなく、それらが製品を繰り返し停止し、私の理解に反することを行ってきた20年の歴史を見てきました。 一例として、Microsoftが買収し、しばらくの間Microsoftが販売した、Virtual PCが無料になり、その後殺されました。
それはそのような多くのケースの1つにすぎません。

Power BIと、それがやがて新しいSSRSになるかもしれないというゴシップについての話を聞いたことがあります。
それが確かなのか、それとも単なるゴシップなのかはわかりません。 Azureベースのサービスをプッシュするモデルに従います。

SSRSがWebベースの認証をサポートしているのを見るのが大好きです-OpenIDConnectが望ましいです-箱から出して。 さらに一歩-SSRSがASP.NETCoreのナゲットだったら素晴らしいと思います。 レポートのスケジューリングとユーザー管理-サンプルプロジェクトを提供するかもしれませんが、SSRS APIに関するドキュメントがあれば、その部分を開発しても問題ありません。

@Morgma
同意しました!
OIDCは私がしていることにぴったりです。
レポートサーバーの役割のマッピングをアプリケーションの役割に提供できるように、役割を実行する必要があります。

現在、Angular 4/5フロントエンドでOIDCを使用しているアプリがあり、WebフォームレポートページをiFrameにロードする必要があり、Windowsユーザーアカウントを使用して権限を制御する必要があるため、レポートサーバーデータベースにクエリを実行すると、どのユーザーがレポートを実行しているかは実際にはわかりません。 それは私たちが使用できるクルーゲですが、理想からはほど遠いです。

これは私たちにとっても大きな問題であり、マイクロソフトからこれについて何も聞いていないことは本当に信じられません。 この時点で、マイクロソフト以外のオプションを真剣に検討するようになりました。 少なくともタイムラインがあれば、十分な情報に基づいて決定を下すことができます。

同意します。エクスポートを直接機能させるためだけに、ReportServer /ReportExecution2005.asmxを直接使用するというルートをたどりました。 IISでホストすると、奇妙なエラーが発生します。

イライラしてきました。

System.ServiceModel.Security.MessageSecurityException: The HTTP request is unauthorized with client authentication scheme 'Basic'. The authentication header received from the server was ''

そのエラーは、認証用のヘッダーが欠落していることを示しています。httpリクエストにはヘッダーを含める必要があります。 問題と呼ぶのは必要ですか?

IISでホストされるまでは正常に機能します。 私の開発マシンでさえ同じレポートサーバーと通信していて、それは機能しますが、IIで公開およびホストされると、そのエラーが発生します。 サーバーがなんらかのエラーを空にして応答していると言っていると思いますが、私はすべてを送信しています。

IIS Expressはユーザーの資格情報の下で実行されるため、ダブルホップで問題ない可能性があることに注意してください。 おそらく発生しているのは、IISサーバーにKerberosが設定されておらず、委任がオンになっている場合でも、レポートが匿名で実行されているため、レポートが機能しないことです。

簡単な答え:Kerberosを設定しないと委任を使用できません。これには、IISアプリプールを実行するアカウントのドメインコントローラーでの設定が必要です。

https://blogs.msdn.microsoft.com/chiranth/2014/04/17/setting-up-kerberos-authentication-for-a-website-in-iis/

これは適切な場所ではないことはわかっていますが、フォローアップしたいと思いました。 IISでCoreをホストしているため、IIS設定を何に設定してもかまいません。 S&Gのためだけに、appPoolユーザーをAdministratorにしたところ、機能しました。 図を見てください...これは、匿名以外のIIS認証設定が有効になっていない状態です。 誰かがこれを説明しますか? 特別なアクセスが必要なCore上のWCFのライブラリにアクセスする必要がありますか? 何が得られますか? 私は混乱しています...そしてセキュリティについて心配しています。

@cgountanis質問で新しい問題を開くことができますか?

@jtarquino .netコアベースのレポートビューアのリリースに関するタイムラインの更新はありますか? 私は少なくともタイムラインを取得するために必死です。 私たちは6ヶ月話しているのですか? 12ヶ月? 基本的に、現在のSSRSレポートをすべて破棄し、別のソリューションを採用するという決定に直面しています。これは、代替手段がなく、可用性に関するタイムラインもないためです。

@ExcaliburVTはバックログにありますが、現時点で提供できるタイムラインがありません。

@jtarquinoオープンソースは素晴らしいですが、同時にマイクロソフトは顧客に対して責任を負う必要があり、顧客は製品の代金を支払い、顧客は製品の配達を必要としています。 私たちはお客様です。

これは、Microsoftの移行がそれほど大きくない領域の1つです。 私たち顧客が正しい答えを得ることができない場合、私たちはいつまで戻ってきますか?

これと同じようなことが、これだけでなく、いくつかの製品で起こっています。 ビジネスを実行するために必要な更新を取得できない場合、SQL ServerとSSRSの次のリリースのライセンスを取得するようマネージャーにアドバイスする必要があるのはなぜですか?

@jtarquino @figuerresに同意する必要があります。文字通り、3か月の戦いを終えて、SQL over Oracleの使用の承認を得て、私の主要なセールスポイントの1つがネイティブでサポートされていないことを発見したからです。 .Net Coreドライバーが利用できないことでOracleを非難していましたが、少なくともリリース日が発表されていました。 SSRSはあなた自身の製品であり、解決の提案日さえなく、完全に2世代遅れています。

新しいVS2017WCFコネクタサービス(コア2)を使用すると、パラメーター付きのレポートをPDF、Word、Excel、CSVにエクスポートできます...このビューアーNUGETパッケージがリリースされる前にヘルプが必要な場合は、非常に簡単です。 ええ、SSRSに付属のReportExecution2005.asmxを使用する必要がありますが、SSRSが作成するものはすべて使用します。 今のところ、ビューアの側面をダンプして、ファイルを直接ダウンロードすることにしました。

編集:問題は、前述のAppPoolパーミッションを把握することだけです。

ちなみに、私はWeb APIからPDFとしてレポートを取得し、wcfビットを使用していません。
soap / asmx呼び出しとhttp呼び出しだけです。
それらを行う際に、私は問題なくクレジットを渡します。
私のコードはasp.net4.6 / web api2です
私が何をしているのかを知りたい場合は、来週githubにコードを載せてチェックアウトすることができます。
私はレポートサーバー2016を呼び出していますが、私が行っていることのほとんどは、古いssrsリリースで機能します。

SSRS(RDLC Designer)を使用したCore 2の新しい点はありますか?

@figuerres githubリクエストにコードを

@apondu
それまではオフィスではなく、来週投稿します。 今まで誰もコードを要求しませんでした。

イントラネットアプリケーションAngular5 / .NetCore2 MVC5(MSの現在のRCスタック)で作業しています。SSRS2012を使用しており、ログインしているWindowsアカウントではないユーザーの時間ベースのレポートサブスクリプションを作成する必要があります。

@figuerresおそらくあなたはいくつかのアイデアを持っていますか?

SSRSと組み込みのレポート実行サービスを使用して、一日中PDFを吐き出すことができます。

@cgountanisこのような迅速な対応に感謝します。あなたは、私が何をする必要があるかを説明するときに、私が十分に説明的/正確ではなかったことに気付くのを助けてくれました。 元のコメントを更新して、「時間ベースのレポートサブスクリプションを作成する」と言いました

うーん、サブスクリプションスケジュールの行をレポートデータベースに直接挿入することで、そのようなことをしたと思います(テーブルと既存の行に基づいてサブスクリプションサービスがどのように機能するかを推測しました)。

@ExcaliburVTこれまで、SOAP APIと大きなSPを使用してDBと対話してきましたが、DBを直接変更することは避けたいと思います。 フォールバックオプションがあることを知ってうれしいです。

時間ベースとはどういう意味ですか?

特定の時間にレポートを実行する必要がありますか?
ユーザーが何かをしたときにレポートを実行する必要がありますか?

@figuerres時間ベース。つまり、毎週水曜日の午前8時などの定期的なスケジュールに基づいています。

ええ、少なくともSQL 2012に手動でレコードを挿入しないと、それを行う方法を見つけることができませんでした。覚えていれば、スキーマを変更する必要はなく、サブスクリプションテーブルに行を挿入するだけで済みました。その方法で配布グループにレポートを送信します。

わかりました。レポートサーバーポータルは、計画されたスケジュールでレポートを実行できます。レポートをファイルに保存したり、そのときにメールを送信したりできます。
実行時に誰かがログインする必要はありません。

ポータルからサブスクリプションを作成するだけです。

SOAP APIからそれを行うこともできますが、実行するAPI呼び出しの正確なセットがわかりません。

私がsoapAPIから見たものについて話す前に、より多くのコンテキストを与えることを許可します。

SSRSsoapAPIと「ssrsReportWebAdmin」のような資格情報を使用するWebアプリを作成しています。 現在開発中の「ssrsReportWebAdmin」にはすべてのセキュリティロールがありますが、ドキュメントに基づくと、必要なのはContentManagerロールのようです。 ユーザーはwebappを使用して他の人のサブスクリプションを作成し、soapAPIを介してそれらのリクエストを送信します。

CreateSubscriptionAsync呼び出しは、ユーザーに権限がないことを示すエラーを返します。

したがって、APIを呼び出すと、すべてのロールを持つユーザー「ssrsReportWebAdmin」のcredオブジェクトが渡されますが、権限がないというエラーが表示されますか? 面白い....

私が読んだところによると、SSRSはセットアップされているので、標準の(定期的な時間ベースの)サブスクリプションを作成できるのはユーザー自身だけです。 データドリブンサブスクリプションは、ContentManagerロールによってセットアップできます。

ContentManagerTasks-すべてのサブスクリプションの管理を参照してください
https://technet.microsoft.com/en-us/library/ms159693(v = sql.105).aspx

ヘッダーの下の最初の文を参照してください「ReportingServicesは2種類の...をサポートしています」
https://docs.microsoft.com/en-us/sql/reporting-services/subscriptions/subscriptions-and-delivery-reporting-services#bkmk_standard_and_datadriven

@figuerres @ExcaliburVT
Content Manager SSRSの役割を持つADアカウントを使用して、電子メールとファイル共有の両方に対する標準のサブスクリプションを作成することができました。 金曜日に発生したアクセス許可の問題は、空白/不正な形式のMatchDataパラメーターの副作用でした。

ほぼ2年。 Core2.0がリリースされました。 SSRSチーム、起きて。

@ codehippie1はそんなに失礼なことはありません。 私たちは皆ここにいる人間です。 成長する!

それは開発者の洞窟での単なる冗談でした。 犯罪は何の意味もありません。 冗談は別として、ReportViewerForMVCのダウンロード数は2014年初頭から72,799回になりました(https://www.nuget.org/packages/ReportViewerForMvc)。 SSRSチームは、ASP.NET MVCを長年無視してきましたが、現在はASP.NETCoreを2年間無視しています。 失礼と言えば72,799回も多いです。

私は公式にサポートされているPDFライブラリへの素晴らしいエクスポートに落ち着きます。最近では、レスポンシブ要件を備えたビューアは必要ありません。

@cgountanis :HTMLテンプレートを生成します(正しい用紙サイズ

@cgountanis私はそのようなアプローチを考えましたが、ページのヘッダー/フッターと論理的な場所での改行を含むピクセルパーフェクトレポートを生成するのは簡単ではありません。

aspnetコアにMSRDLCローカルレポートビューアーがないという私の苦痛を共有しているすべての人のために。 私はmozillaのpdfJとViewerJの助けを借りて別のアプローチを試しました-MSRDLCレポートビューアを使用したpdfJのデモで、レポートをバイトとして吐き出します。 私にとって、これは両方の長所です。RDLCファイルを引き続き使用し、それらを使用してサーバー側でレポートを生成し、強力なFirefoxをドキュメントビューアーに組み込んで出力を表示できるからです。 PdfJsはまだレポートビューアではありませんが、ページナビゲーション、印刷プレビュー、検索、その他の便利な機能を備えた私の場合も同様です。

興味のある方のために、aspnetコアアプリケーション(Angular 2以上のクライアント側、rxJsおよびTypescript)内でそれを使用する方法を支援するための要点を以下に示します。 私にとって、これは単に両方の長所です。

pdf.jsとviewer.htmlをAngular2アプリケーションに追加する方法(オプションのaspnet core / webapi / mvcバックエンドレポートをMSローカルRDLCレポートビューアーを使用して生成)

私は、reactまたは他のクライアント側ライブラリを使用してAngular 2を非常にうまく変更できると信じていますが、原則は同じです。

SSRSと直接連携しますか?

@cgountanis前の投稿はRDLCです。これは、レポートサーバーがなく、Webサーバーがレポートをレンダリングすることを意味します。

マイクロソフトからの興味深いアップデート...

https://blogs.msdn.microsoft.com/sqlrsteamblog/2018/04/02/microsoft-acquires-report-rendering-technology-from-forerunner-software/

レポートサービスへの投資を加速するために、Forerunner Softwarehttps //forerunnersw.com/からテクノロジーを取得したことをお知らせします。 このテクノロジーには、特に、Reporting Services(* .rdl)レポートのクライアント側レンダリング、レポートを表示するためのレスポンシブUIウィジェット、レポートを他のアプリに統合するためのJavaScript SDKが含まれます。これは、パートナーが構築を達成できることの証です。私たちのオープンプラットフォーム。

これはあなたにとって素晴らしいニュースです。あなたから聞いたフィードバックの複数のポイントにこのテクノロジーを適用する機会があると考えています。

  • SSRSレポートを実行できるクラウドのSoftware-as-a-Service(SaaS)またはPlatform-as-a-Service(PaaS)を探しています。 Spring '18リリースノートhttps://aka.ms/businessappsreleasenotesでご覧になったように、SSRSレポートをPower BIクラウドサービスに提供することに積極的に取り組んでおり、クライアント側のレンダリングに基づいてそれを可能にします。
  • おそらくPowerBIアプリを使用して、携帯電話でSSRSレポートを表示したいとします。 このテクノロジーは、レポートパラメータ値の提供、レポート内のナビゲート、場合によってはレポートコンテンツの表示のために、より優れた、より応答性の高いUIを提供するのに役立つと信じています。
  • あなたはレポートビューアコントロールが大好きです…しかし、それはASP.NETWebフォームコントロールです。 ASP.NET Core / MVCアプリまたは非ASP.NETアプリに統合できるものが必要です。 このテクノロジーにより、最新のアプリに統合できるクライアント側/ JavaScriptベースのレポートビューアーを提供したいと考えています。

これらは大規模な事業であり、共有する時間枠はまだありませんが、私たちは常に進捗状況をあなたと共有し、できるだけ早くそして頻繁にあなたのフィードバックを聞くよう努めているので、今後数ヶ月間ご期待ください。

よろしく

ポール


差出人:Denny Figuerres [[email protected]]
送信:2018年3月23日金曜日2:19 AM
宛先:aspnet / Home
Cc:ポール・シェルドン; コメント
件名:Re:[aspnet / Home] Asp.Net Core Reporting(SSRS)(#1528)

@cgountanis https://github.com/cgountanis前の投稿はRDLCです。これは、レポートサーバーがなく、Webサーバーがレポートをレンダリングすることを意味します。


あなたがコメントしたのであなたはこれを受け取っています。
このメールに直接返信するか、GitHub https://github.com/aspnet/Home/issues/1528#issuecomment-375408680で表示するか、スレッドhttps://github.com/notifications/unsubscribe-auth/AEHciZa6-をミュートします

なんてこった、このjQueryのがらくたではない。
ブロートウェア。
そして、ブロートウェアだけでなく、slowwwwwww ...

ブロートウェアの定義が必要な場合は、これが適しています。
完璧を期すために、基本的にjQuery UIが欠けているだけですが、そのようなことをする人は、それでもdatepickerに追加する時間を見つけることができると確信しています。

ああ待って、私はちょうど見た

jquery-ui-1.10.3.forerunner.js

私の悪い、気にしないでください。
それは間違いなく完璧な例です。
もちろん、jQuery-UIを追加するだけでなく、独自の変更バージョンもロールバックします。

神よ、これはがらくたのように見えます。 CrAppleiPadとデスクトップ上のタッチスクリーンの直後の電話でのレポート-必要なものだけ-...
そして、私はまだプロキシサーバーで動作するSSRS、またはauth-cookie-sharing(マルチテナント仮想名ベースのホスティング-auth-cookieを上書きせずに単一ドメインマルチ仮想ディレクトリiframeインクルード)を実行できることを受け入れます別の仮想ディレクトリの)。 または、(SSRS 2016以降で)IEとChrome、場合によってはFirefoxでテーブルの境界線を等しくレンダリングする場合。
または、クエリ文字列を介してカルチャを手動で設定できるようにするために、パラメータのタイトルを翻訳して、MSがとにかく正しく取得できないため、自分で日付ピッカーを実行します...

これはブロートウェアの定義です:

<link href = "~/Forerunner/Common/css/Forerunner-all.css" rel="stylesheet" />
<link href = "~/Forerunner/Lib/jQuery/css/jquery-ui-1.10.3.forerunner.css" rel="stylesheet" />
<link href = "~/Custom/Mobilizer.css" rel="stylesheet" />

<script type = "text/javascript" src="~/Forerunner/Lib/jQuery/js/jquery-1.11.0.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/Misc/js/jquery.hammer.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/Misc/js/json2.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/Misc/js/scroll-startstop.events.jquery.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/Misc/js/jquery.lazyload.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/jsTree/jstree.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/misc/js/jquery.FRmaphilight.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/Misc/js/moment.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Bundles/forerunner.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Bundles/forerunner-tools.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Bundles/forerunner-widgets.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/jQuery/js/jquery.form.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/jQuery/js/jquery.watermark.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/jQuery/js/jquery.validate1.11.1.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/jQuery/js/jquery-ui-1.10.3.forerunner.js"></script>
<link href = "~/Forerunner/Common/css/Forerunner-all.css" rel="stylesheet" />
<link href = "~/Forerunner/Lib/jQuery/css/jquery-ui-1.10.3.forerunner.css" rel="stylesheet" />
<link href = "~/Custom/Mobilizer.css" rel="stylesheet" />

<script type = "text/javascript" src="~/Forerunner/Lib/jQuery/js/jquery-1.11.0.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/Misc/js/jquery.hammer.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/Misc/js/json2.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/Misc/js/scroll-startstop.events.jquery.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/Misc/js/jquery.lazyload.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/jsTree/jstree.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/misc/js/jquery.FRmaphilight.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/Misc/js/moment.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Bundles/forerunner.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Bundles/forerunner-tools.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Bundles/forerunner-widgets.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/jQuery/js/jquery.form.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/jQuery/js/jquery.watermark.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/jQuery/js/jquery.validate1.11.1.min.js"></script>
<script type = "text/javascript" src="~/Forerunner/Lib/jQuery/js/jquery-ui-1.10.3.forerunner.js"></script>

どうですか:

<link href = "~/css/CustomerX/3kb_styles.sass" rel="stylesheet" />
<script charset="utf-8" type = "text/javascript" src="~/Scripts/4kb_scripts_with_async.ts.js" async="async"></script>

またはさらに良い

<script async="async"  charset="utf-8" src="js/loader.js?v=1"
data-js="[ 'js/HtmlToolsAsync', 'js/mainAsync' ]"
data-js-ie-edge="['js/polyfills/es6-promise-2.0.0.min', 'js/polyfills/classList']" 
data-css="['css/{@customer}/styles']" data-css-ie-edge="['css/fixes_for_crappy_browsers_only']"></script>

各スクリプトとスタイルシートにunix-timestampを追加するとボーナスポイントが得られるため、変更/修正が実際に有効になります。 カルチャ固有の文字列ではなくunix-timestampとして日時値を渡し、2030または9999を超える日付で失敗しない場合、またはUTF8文字でボーナスポイントが拡張されます。 右から左への言語のサポートに関しては、マイクロソフトの限界を超えたくはありません。 彼らはそのずっと前に失敗します。 複数のヨーロッパ言語(英語、ドイツ語、フランス語、イタリア語など)で同時に機能する場合、それらはすでに私の期待を超えています。

親愛なるマイクロソフト、レポートにすべてのフィールドが翻訳されているかどうかもテストしたいと思います。そのために、ブラウザの言語設定を毎回変更することなく、異なる言語で異なるユーザーとしてログインしたいと思います(またはこれを行う方法を顧客に伝える-これはこれまでのあなたの究極の成果です-私が追加するかもしれない忘れられない[非常に否定的な]経験-特にWindowsへの切り替え後8)。
あなたが関係することができる何かが必要な場合-英語以外のユーザーのためにセットアップされたコンピューターで作業する英語のユーザーが存在する場合もあります。 したがって、開発者として、ユーザーエージェントの言語設定によって決定されるだけでなく、アプリケーションから表示言語を設定できれば便利です。 たぶん、今回は少なくともこれを考慮に入れることができます。

しかし、私が上記のがらくたを見れば、私はあなたがそうしないとすでに言うことができます。

ちなみに、SSRSの現在の化身に文化を設定する方法では、次のことを行う必要があります。

&in_language = IETF-language-tagを使用してレポートを呼び出す

\ machinename \ Reporting Services \ ReportServer \ Pages \ ReportViewer.aspx


<script type="text/C#" runat="server">

protected override void InitializeCulture()
{
    string language = System.Web.HttpContext.Current.Request.QueryString["in_language"];

    if (string.IsNullOrEmpty(language))
        language = "";

    switch (language.ToLowerInvariant())
    {
        case "de":
            language = "de-CH";
            break;
        case "fr":
            language = "fr-CH";
            break;
        case "it":
            language = "it-CH";
            break;
        case "en":
            language = "en-US";
            break;
        default:
            language = "";
            break;
    }

    // System.Web.HttpContext.Current.Response.Write(language);
    if (!String.IsNullOrEmpty(language))
    {
        System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(language);
        System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
    }

    base.InitializeCulture();
}
</script>

次に、httpリクエストで言語を上書きする必要があります(SSRSのカスタムHTTPモジュール)
(そして、P3Pポリシーは、フォームログイン投稿が別のドメインのiframe上にあるときに機能することを目的としています)。

(DISPLAY)言語パラメーターを提供せずにこれを壊さないでください。
パラメータrs:ParameterLanguageは、レポートの表示ではなく、URLのパラメータにのみ影響します。 また、最初から存在している必要はありません。たとえば、日時をunix-timestamp(UTC)として渡した場合などです。 そしてもちろん、常にsameoriginヘッダーまたはallow-fromヘッダーを使用する必要があります(iframeはReportServerとは異なるドメインにあります)。 ちなみに、HTTPモジュールでリクエスト言語を設定するのは、SSRS 2016で日付ピッカーを必要な言語に設定するためです。そうしないと、JavaScriptにen-US日付ピッカーがあると失敗します。 すごいですね。

どうですか:&rs:language = IETF / IANA言語タグ?


namespace libRequestLanguageChanger
{


    public class RequestLanguageChanger : System.Web.IHttpModule
    {


        void System.Web.IHttpModule.Dispose()
        {
            // throw new NotImplementedException();
        }


        void System.Web.IHttpModule.Init(System.Web.HttpApplication context)
        {
            // https://stackoverflow.com/questions/441421/httpmodule-event-execution-order
            context.BeginRequest += new System.EventHandler(context_BeginRequest);
            context.EndRequest += new System.EventHandler(context_EndRequest);
        }


        void context_BeginRequest(object sender, System.EventArgs e)
        {
            System.Web.HttpApplication application = sender as System.Web.HttpApplication;
            System.Web.HttpContext context = application.Context;

            if (context.Request != null)
            {
                // string language = context.Request.Headers["Accept-Language"];
                string language = null;
                // string url = context.Request.RawUrl;
                // string referrer = null;


                if (context.Request.UrlReferrer != null)
                {
                    // referrer = context.Request.UrlReferrer.OriginalString;

                    string queryString = context.Request.UrlReferrer.Query;
                    System.Collections.Specialized.NameValueCollection queryStrings = System.Web.HttpUtility.ParseQueryString(queryString);
                    language = queryStrings["in_language"];
                }

                if (context.Request.QueryString["in_language"] != null)
                    language = context.Request.QueryString["in_language"];

                if (!string.IsNullOrEmpty(language))
                {
                    language = language.ToLowerInvariant();

                    switch (language)
                    {
                        case "de":
                            language = "de-CH";
                            break;
                        case "fr":
                            language = "fr-CH";
                            break;
                        case "it":
                            language = "it-CH";
                            break;
                        case "en":
                            language = "en-US";
                            break;
                        default:
                            language = "";
                            break;
                    }

                } // End if (!string.IsNullOrEmpty(language)) 

                // SQL.Log(url, referrer, language);


                // Simulate Browser-Language = language 
                if (!string.IsNullOrEmpty(language))
                {
                    // context.Request.Headers["Accept-Language"] = language;

                    System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo(language);
                    System.Threading.Thread.CurrentThread.CurrentCulture = culture;
                    System.Threading.Thread.CurrentThread.CurrentUICulture = culture;

                    for (int i = 0; i < context.Request.UserLanguages.Length; ++i)
                    {
                        // context.Request.UserLanguages[i] = "en-US";
                        context.Request.UserLanguages[i] = language;
                    }

                } // End if (!string.IsNullOrEmpty(language)) 

            } // End if (context.Request != null) 


        } // End Sub context_BeginRequest 



        // https://stackoverflow.com/questions/31870789/check-whether-browser-is-chrome-or-edge
        public class BrowserInfo
        {

            public System.Web.HttpBrowserCapabilities Browser { get; set; }
            public string Name { get; set; }
            public string Version { get; set; }
            public string Platform { get; set; }
            public bool IsMobileDevice { get; set; }
            public string MobileBrand { get; set; }
            public string MobileModel { get; set; }


            public BrowserInfo(System.Web.HttpRequest request)
        {
            if (request.Browser != null)
            {
                if (request.UserAgent.Contains("Edge")
                    && request.Browser.Browser != "Edge")
                {
                    this.Name = "Edge";
                }
                else
                {
                    this.Name = request.Browser.Browser;
                    this.Version = request.Browser.MajorVersion.ToString();
                }
                this.Browser = request.Browser;
                this.Platform = request.Browser.Platform;
                this.IsMobileDevice = request.Browser.IsMobileDevice;
                if (IsMobileDevice)
                {
                    this.Name = request.Browser.Browser;
                }
            }
        }


    }


    void context_EndRequest(object sender, System.EventArgs e)
    {
        if (System.Web.HttpContext.Current != null && System.Web.HttpContext.Current.Response != null)
        {
            System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;

            try
            {
                // response.Headers["P3P"] = "CP=\\\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\\\"":
                // response.Headers.Set("P3P", "CP=\\\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\\\"");
                // response.AddHeader("P3P", "CP=\\\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\\\"");
                response.AppendHeader("P3P", "CP=\\\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\\\"");

                // response.AppendHeader("X-Frame-Options", "DENY");
                // response.AppendHeader("X-Frame-Options", "SAMEORIGIN");
                // response.AppendHeader("X-Frame-Options", "AllowAll");

                if (System.Web.HttpContext.Current.Request.UrlReferrer != null)
                {
                    // "X-Frame-Options": "ALLOW-FROM " Not recognized in Chrome 
                    string host = System.Web.HttpContext.Current.Request.UrlReferrer.Scheme + System.Uri.SchemeDelimiter
                        + System.Web.HttpContext.Current.Request.UrlReferrer.Authority
                        ;

                    string selfAuth = System.Web.HttpContext.Current.Request.Url.Authority;
                    string refAuth = System.Web.HttpContext.Current.Request.UrlReferrer.Authority;

                    // SQL.Log(System.Web.HttpContext.Current.Request.RawUrl, System.Web.HttpContext.Current.Request.UrlReferrer.OriginalString, refAuth);

                    if (IsHostAllowed(refAuth))
                    {
                        BrowserInfo bi = new BrowserInfo(System.Web.HttpContext.Current.Request);

                        // bi.Name = Firefox
                        // bi.Name = InternetExplorer
                        // bi.Name = Chrome

                        // Chrome wants entire path... 
                        if (!System.StringComparer.OrdinalIgnoreCase.Equals(bi.Name, "Chrome"))
                            response.AppendHeader("X-Frame-Options", "ALLOW-FROM " + host);

                        // unsafe-eval: invalid JSON https://github.com/keen/keen-js/issues/394
                        // unsafe-inline: styles
                        // data: url(data:image/png:...)

                        // https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet
                        // https://www.ietf.org/rfc/rfc7034.txt
                        // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
                        // https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP

                        // https://stackoverflow.com/questions/10205192/x-frame-options-allow-from-multiple-domains
                        // https://content-security-policy.com/
                        // http://rehansaeed.com/content-security-policy-for-asp-net-mvc/

                        // This is for Chrome:
                        // response.AppendHeader("Content-Security-Policy", "default-src 'self' 'unsafe-inline' 'unsafe-eval' data: *.msecnd.net vortex.data.microsoft.com " + selfAuth + " " + refAuth);


                        System.Collections.Generic.List < string > ls = new System.Collections.Generic.List<string>();
                        ls.Add("default-src");
                        ls.Add("'self'");
                        ls.Add("'unsafe-inline'");
                        ls.Add("'unsafe-eval'");
                        ls.Add("data:");

                        // http://az416426.vo.msecnd.net/scripts/a/ai.0.js

                        // ls.Add("*.msecnd.net");
                        // ls.Add("vortex.data.microsoft.com");

                        ls.Add(selfAuth);
                        ls.Add(refAuth);

                        string contentSecurityPolicy = string.Join(" ", ls.ToArray());
                        response.AppendHeader("Content-Security-Policy", contentSecurityPolicy);
                    }
                    else
                    {
                        response.AppendHeader("X-Frame-Options", "SAMEORIGIN");
                    }

                }
                else
                    response.AppendHeader("X-Frame-Options", "SAMEORIGIN");
            }
            catch (System.Exception ex)
            {
                // WTF ? 
                System.Console.WriteLine(ex.Message); // Suppress warning
            }

        } // End if (System.Web.HttpContext.Current != null && System.Web.HttpContext.Current.Response != null)

    } // End Using context_EndRequest


        private static string[] s_allowedHosts = new string[]
    {
        "localhost:49533"
            , "localhost:52257"
            , "www.companyX.com"
            , "companyX.com"
            , "vmcompany1"
            , "vmcompany2"
            , "vmbank1"
            , "vmbank2"
    };


        public static bool IsHostAllowed(string host)
    {
        return Contains(s_allowedHosts, host);
    } // End Function IsHostAllowed 


        public static bool Contains(string[] allowed, string current)
    {
        for (int i = 0; i < allowed.Length; ++i)
        {
            if (System.StringComparer.OrdinalIgnoreCase.Equals(allowed[i], current))
                return true;
        } // Next i 

        return false;
    } // End Function Contains 


} // End Class RequestLanguageChanger 


} // End Namespcae libRequestLanguageChanger 

Microsoftは、そのフロントランナーコードをそのまま使用しないでください。
最新のクライアントサイドWebアプリは、jqueryからesモジュールなどに移行しています。
大量のjクエリコードを取り込む必要はありません。
このjクエリの山ではなく、クライアントにpdfまたは現在のasp.netコントロールを提供したいと思います。

Angular2-6とノードおよびその他のWebクライアントフレームワークでうまく機能するnpmパッケージを作成します。
SSRSレンダリングも引き続き使用でき、多くの利点があります。 更新されたWebサービスAPIのセットを取得するだけです

これに関する更新はありますか?

ええと、基本的に私たちはすでに必要なものをすべて持っているでしょう。
必要なのは、REST / JSONバージョンの実装です。
http://localhost/ReportServer/ReportExecution2005.asmx
(私たち/誰かがURLをカスタマイズできれば害はありません)
nugetパッケージとして-Linux / Macでも動作するパッケージ。
実行する必要があるのは、.NETコードを.NET Core / NetStandardに移植し、Windowsdllへのすべてのピンボークを削除することだけです。 次に、もちろん、Webサービスを介してPAGED htmlを出力する機能を追加し(現在は不足しています-asp.net-render-controlにあるため)、ダウンロードファイル名を設定できるようにします。

XmlDocumentを使用してRDLを読み取るなど、自分で行うこともできるパラメーターの選択。
(オプションの明示的なオフ、オプションの厳密なオフ、VBコードによるオプションの推測に関するいくつかの問題が発生する可能性があります)
現在のASP.NETコントロールのようなものですが、ASP.NET-WebFormsのすべてのものがありません。

したがって、JavaScriptの1行の要件すらないと思います。それは、プロジェクトごと、会社ごと、人ごとに異なります。
jQueryのようなものもあります。 Angularが好きな人もいます。 Vueのようなものもあります。 Reactが好きな人もいます。 NPMを使用したNodeJSのようなもの、bowerのようなもの、TypeScriptのようなもの、Babelのようなもの、フロー、さらには日付ピッカーにjQuery-UIを使用するものもあります。

たとえば、私はこれらすべてのフレームワーク(特にjquery-ui)を大いに嫌っています。ショウジョウバエの寿命、バージョン間の非互換性、肥大化、非モジュール性、そして何であれ、それらが何であるかを知らない人々のコミュニティの学習曲線があります。やっている(注:私は自分が何をしているのかを常に知っているとは言いたくない)、そしてnpm / bowerのような壊れたパッケージマネージャーは、あなたがするたびに新しい喜びを生み出す方法を常に見つけるという不快な特徴を持っていますそれらを使用したかったでしょう。

だから私はVanillaJS(ECMAモジュールと非同期-babelまたはtypescriptでトランスパイルされた-)を使用し、トランスパイラーを気にします。

もちろん、多くの人が反対するでしょう-そして、反対する理由があるので、あなたには反対する権利があります。 結局、私はあなたが何を使用するかは気にしません-どうしても必要な場合は、jquery-uiとvueでcoffeescriptとemacsを使用してください-ただ私をその道に追いやらないでください。 jquery / angular / vue / react / bower / npmやその肥大化と信頼性の欠如は必要ありません。

とはいえ、(RDLCではなく)ReportServerのように、誰でも自分のサイトに配置してパラメーターを自動的に選択できるJavaScriptライブラリを提供したい場合は、現在のreportviewer-controlとは異なり、私はそれですべてです。 。 その場合は、レポートの「コントロール」から独立させてください。 また、ノードのような構造を使用してECMAモジュールを構成し、ノードを使用したい人がnode / npmで使用できるようにし、使用する必要がない人も使用できるようにします。

サイドノードとして、REST / JSONバージョンがレンダリングされたファイルのようにサービスからフィルターデータをjsonとしてフェッチすることを許可した場合、RDLファイルを読み取る必要さえなく、非常に国連の複雑なJSがあります図書館。 現在パラメータで許可されているVBコードは、とにかくクライアント側でこれを行うことを許可しません。

または、さらに考えてみると、サービスがレポート内の各データセットをJSONとしてフェッチできるようにするとさらに良いでしょう。 各パラメータのデフォルト値も読み取れるようにする必要があると思います。 次に、レポートで使用されているSQLデータの正確性の単体テストを行うこともできます。
(ユニットテストレポートは現在かなり不可能です)

次に、フォーマット用のスタイルシートを1つ追加すると、トリックが終了します(SASSをお願いします)。 そして、追加/代替レンダラー用のプラグインシステムはそれを四捨五入します。 ¨

しかし、基本的には、マルチプラットフォームのレポートレンダリングライブラリのみが必要です。
他のすべては、コミュニティによって今日すでに行われている可能性があります。
既存のコントロールのソースが利用可能であれば、必要な作業のすべてまたはほとんどをコミュニティが完全に行うことさえできたと思います。マイクロソフトに1セント硬貨を費やすことすらありません。

alanjudenMvcReportViewerはSSRS2017およびコア2で動作しますか?このアプローチをSSRS2017およびコア2に使用できますか

いいえ、多くの頭痛がないわけではありません。 最も簡単な解決策は、reportexecution2005を直接使用してPDFを直接エクスポートすることです。 特に携帯電話やタブレットの場合、古いビューアをレスポンシブ形式で取得しようとすると苦痛になります。

@Mahenbisht 、コア2で機能させるには、パッケージを最新バージョンに更新してソースからビルドする必要があります。2017年はまだ試していません。

SSRS2017とコア2でSQLServer2017を使用しています。
alanjuden.MvcReportViewer.NetCoreを使用できない場合、他のアプローチはありますか

@Mahenbisht 、私はしばらくの間私にあまり積極的ではなかったことを知っています...しかし、あなたはまだ同様のアプローチを使うことができます。 私が使用している(SSRSに組み込まれている)Reporting Service APIにいつでも接続して、独自のレポートを実行し、任意の形式でレポートを配置できます。

@Mahenbisht :ここに.NET Core nugetパッケージがあります:
https://www.nuget.org/packages/AspNetCore.ReportViewer/
残念ながら、ソースはまったくないので、それが何をするのか、そしてそれをどのように使うのかを見ることができません。
だから私はここでそれを逆コンパイルし

ReportExecution2005&ReportService2010-WSDL for .NETCoreから生成されたクラスのようです。
したがって、SSRSを使用してSQLサーバーの実行中のインスタンスにネットワークアクセスできる場合は、独自のビューアを作成することを妨げるものは何もありません。
私の記憶が正しければ、ページングされたhtml出力を取得するためにレンダリングするためにdeviceinfoを渡す必要があります。
これにより、パラメータを手動で実行する必要があります。これは、私が(理論的に)現在取り組んでいることです。

@alanjuden :アプローチの問題は、ReportingServicesがインストールされたSQL-Serverのインスタンスが必要なことです。 それがある場合は、iframeを/ ReportServerに配置し、小さなカスタム認証+ W3Cヘッダーと言語ローカライザーDLLをreportingservicesに追加することもできます。 そうすれば、あなたはあなたの仕事をまったく必要としません。

それの問題はそれです
A)N人のお客様が常に同じバージョンのSSRSをインストールしているとは限りません(すべての累積的な更新/サービスパック-私の場合、現在SSRS-2008R1から2016の範囲です)。
B)SSRS-Expressのインストールでは、ローカルマシン上のデータベースにのみアクセスできます。 そして本当にひどいのは、Windows以外のPC(Linux、Mac)で動作するReportViewerコントロールがないことです-したがって、.NETをBirtまたはJasper用のJavaと組み合わせる必要があります-これはxcopy-deploymentを壊します-巨大なことは言うまでもありません2〜3のレポート形式の両方のオーバーヘッド、およびJavaJVM全体とTomcatおよび/または他のそのようながらくたを含むbirt / jasperブロートウェア。
C)ReportingServiceが統合Windows認証を使用していること。 したがって、Windowsを使用している場合でも、イントラネットの外部にカスタム認証を追加する必要があります。つまり、ReportingServicesへの変更アクセスが必要であり、変更によって他のソフトウェアが破損する可能性があるため、正気の顧客は次の新しいインスタンスをインストールする必要があります。 SSRS / SQL-Server(費用がかかります)。
また、D)ReportingServiceパラメーターはReportViewer.aspxを変更せずにローカライズできないこと。C)を参照してください。
また、E)SSRS <2016 Renders quirks-htmlのすべてのバージョン(2016+の方が優れていますが、その点では完璧にはほど遠いです)
ただし、2008年の古いバージョンはまだ2018年に存在するため、2016年未満のものがなくなるまでさらに5〜10年かかる可能性があります。 その時までに、SSRS2016はとにかく絶望的に時代遅れになるでしょう。 それまでにMicrosoftがまだ存在しているのであれば、それはそうです。

Dockerが助けになります-幸いなことに。 しかし、それはまだがらくたです。

そして、少しのカスタム認証+ W3Cヘッダーと言語ローカライザーDLLをreportingservicesに追加します。

@ststeigerメインサイトとW3Cヘッダーからカスタム認証を渡してSSRSビューアをiframeに配置するためのオンラインサンプルはありますか?

@adopilot :おおよそのハウツーは次のとおりです。

SSRSにカスタム認証を追加する

https://github.com/Microsoft/Reporting-Services/tree/master/CustomSecuritySample

(データベースごとに1人のユーザーを使用するように少し変更する必要があります。
SSRSユーザーと権限をフォームユーザーと同期し始めたくありません!
このデータベースのフォルダーに対してのみ、このユーザー権限を付与してください。

p3pヘッダーを設定するSSRSにhttpモジュールを追加し、context.Request.UserLanguages [i]を選択した言語で上書きします(そうでない場合、日付ピッカーは機能しません)

ReportServerのログオンページを変更して、パラメータの取得と投稿に反応し、login_cookieを設定してから、投稿されたレポートにリダイレクトします。

アセンブリFormsAuthentication_RS2012のクラスFormsAuthentication_RS2012.LogOnのPage_Loadのコード

フォームの公開鍵で暗号化されたunix-timestamp(再生できないように)で暗号化されたデータPGP / RSAを投稿し、page_loadのFormsAuthentication_RS2012で投稿データを復号化します。

(FormsAuthentication_RS2012コードは、ハードコードされた秘密鍵と管理者パスワードが含まれているため、提供できません)


<%@ Page Language="C#" AutoEventWireup="true" Inherits="FormsAuthentication_RS2012.LogOn, FormsAuthentication_RS2012" %>

<!DOCTYPE html PUBliC "-//W3C//DTD Xhtml 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" /> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>SSRS Login</title>

    <style type="text/css" media="all">

        html, body
        {
            width: 100%;
            height: 100%;
            margin: 0px;
            padding: 0px;
            overflow: auto;
        }


        .divLayout 
        {
            float: left;
            height: 100%;
            background-color: #d4d4d4;
        }


        .spnTitle 
        {
            color: #0060a6;
            font-size: 45px;
            margin: 0;
            font-weight: normal;
            padding-top: 10%;
        }


        .spnLogin 
        {
            font-family: '?Segoe', 'Segoe UI', Segoe, Arial, sans-serif;
            font-size: 26px;
            vertical-align: middle;
            padding-left: 10px;
        }


        .btnLogin 
        {
            border: none;
            width: 204px;
            height: 64px;
            background-color: #d4d4d4;
            vertical-align: middle;
            text-align: center;
            color: #525252;
        }


        .btnLogin:hover
        {
            color: #FFFFFF;   
        }


        .btnLogin:hover .spnLoginSymbol 
        {
            /* http://stackoverflow.com/questions/7217244/style-child-element-when-hover-on-parent */
            background-image: url('<%=FormsAuthentication_RS2012.LogonHelper.GetPageName() %>?image=whiteForward_37x36.png');
        }


        .spnLoginSymbol
        {
            display: inline-block;
            width: 37px;
            height: 36px;
            background-image: url('<%=FormsAuthentication_RS2012.LogonHelper.GetPageName() %>?image=82Forward_37x36.png');
            background-repeat: no-repeat;
            background-size: 100% auto;
            vertical-align: middle;

            color: #525252;
        }


        .spnLoginSymbol:hover
        {
            background-image: url('whiteForward_37x36.png');
        }


        .lblCaption 
        {
            font-family: '☺Segoe', "Segoe UI", Segoe, Arial, sans-serif;
            font-size: .9em;
            display: block;
        }


        input[type=text]
        {
            border: 2px solid rgb(187, 187, 187);
            <asp:Literal Id="litUserNameStyle" runat="server" />
        }


        input[type=password] 
        {
            border: 2px solid rgb(187, 187, 187);
            <asp:Literal Id="litPWStyle" runat="server" />
        }


        input[type=text]:hover, input[type=password]:hover 
        {
            border: 2px solid rgb(237, 206, 0);
        }


        .CorLink
        {
            color: #BF0A1E; 
        }


        .CorLink:hover
        {
            color: rgb(103, 12, 12);
        }

    </style>

</head>
<body>

    <div style="position: absolute; top: 0px; width: 100%; height: 1.5cm; line-height: 1.5cm; vertical-align: middle; text-transform: uppercase; font-weight: bold; background-color: #000000; color: #FFFFFF; text-align: center; font-size: 13px; font-family: '☺Segoe', 'Segoe UI', Segoe, Arial, sans-serif; ">
        <asp:Literal Id="litAuthentication" Text="Forms-Authentication" runat="server" />
    </div>


    <div class="divLayout" style="background-color: #0060A6; width: 30%; text-align: center;">
        <img src="<%=FormsAuthentication_RS2012.LogonHelper.GetPageName() %>?image=mydb3.png" style="margin-top: 40%; margin-left: -50px;" alt="logo" />

        <!-- 

        <img src="accountsicon.png" style="margin-top: 30%;" alt="logo" />
        <img src="mydb3.png" style="margin-top: 30%;" alt="logo" />
        <img src="reportsicon.png" style="margin-top: 30%; width: 20%;" alt="logo" />

        <img src="hap-logo-128.png" style="margin-top: 30%;" alt="logo" />
        -->
    </div>

    <div class="divLayout" style="background-color: #F3F3F3; width: 70%;">





        <div class="greenBorder" style="display: table; width: 100%; height: 100%; #position: relative; overflow: hidden;">

            <div style=" #position: absolute; #top: 50%;display: table-cell; vertical-align: middle;">
                <div style=" #position: relative; #top: -50%">


                    <div style="display: table; margin-right: auto; margin-left: auto;padding-left: 1cm; padding-right: 1cm;">
                        <!--
                        <b>TEST environment</b>
                        -->

                        <span class="spnTitle">
                            SQL Server Reporting Services 2012
                        </span>

                        <div style="display: block; height: 30px;"></div>

                          <form id="form1" target="_self" method="post" runat="server">

                            <div>
                                <label for="txtUserName" class="lblCaption"><asp:Literal Id="litlblUserName" runat="server" />:</label>
                                <input id="txtUserName" name="txtUserName" type="text" style="width: 300px;" />
                            </div>


                            <div>
                                <label for="txtPassword" class="lblCaption"><asp:Literal Id="litlblPassword" runat="server" />: </label>
                                <input id="txtPassword" name="txtPassword" type="password" style="width:300px;" />
                            </div>

                            <div style="display: block; height: 30px; clear: both;"></div>


                            <button type="submit" class="btnLogin" style="">
                                <!--
                                <img src="82Forward_37x36.png" alt="arrow" style="vertical-align: middle; margin-top: 0px;" />
                                -->
                                <span class="spnLoginSymbol"></span>
                                <span class="spnLogin">Login</span>
                            </button>

                        </form>

                    </div>

                </div>
            </div>
        </div>



    </div>
    <!-- End divLayout -->


    <div style="position: absolute; bottom: 0px; width: 100%; height: 1.5cm; line-height: 1.5cm; vertical-align: middle; background-color: #000000; color: #FFFFFF; text-align: center; font-family: '☺Segoe', "Segoe UI", Segoe, Arial, sans-serif; font-size: 13px;">
        Copyright &copy; 2013 

        <a href="http://www.cor-management.ch" target="_blank" class="CorLink" onclick="$('html, body').animate({ scrollTop: 0 }); return false;">
            COR Managementsysteme GmbH
        </a>

    </div>

</body>
</html>

</body>
</html>

ReportViewer.aspxに追加


<script type="text/C#" runat="server">

    protected override void InitializeCulture()
    {
        string sprache = System.Web.HttpContext.Current.Request.QueryString["in_sprache"];

        if(string.IsNullOrEmpty(sprache))
            sprache = "";

        switch(sprache.ToLowerInvariant())
        {
            case "de":
                sprache = "de-CH";
                break;
            case "fr":
                sprache = "fr-CH";
                break;
            case "it":
                sprache = "it-CH";
                break;
            case "en":
                sprache = "en-US";
                break;
            default:
                sprache = "";
                break;
        }

        // System.Web.HttpContext.Current.Response.Write(sprache);
        if(!String.IsNullOrEmpty(sprache))
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(sprache);
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(sprache);
        }

        base.InitializeCulture();
    }

</script>

reportviewer.aspxにパラメーター変換機能を追加します。
((
パラメータはドイツ語/フランス語/イタリア語/英語で書かれています

/で分割し、デフォルトでドイツ語(英語を使用することをお勧めします)
パラメータin_language(in_sprache)をreport-urlに追加すれば、アイデアを理解していれば、これで完了です。


function initLanguage()
{
    var language = null;
    var StyleSheetSet = null;
    var BrowserLanguage = <%= System.Web.HttpContext.Current.Request.UserLanguages != null ? "\"" + System.Convert.ToString(System.Web.HttpContext.Current.Request.UserLanguages[0]) + "\"" : "null" %>;

    if(BrowserLanguage == null)
        BrowserLanguage = window.navigator.userLanguage || window.navigator.language;

    if(BrowserLanguage != null)
        BrowserLanguage = BrowserLanguage.substr(0,2).toLowerCase();



    var dictParameters = getUrlVars(this.location.href);

    if (dictParameters != null && dictParameters.contains("rc:Stylesheet"))
        StyleSheetSet = true;

    if (dictParameters != null && dictParameters.contains("in_sprache"))
        language = dictParameters["in_sprache"];

    if(language == null)
        language = BrowserLanguage;

    if(language == null)
        language = "de";

    language = language.toLowerCase();

    return language;
} // End function initLanguage


function TranslateParameterPrompts(iLanguageIndex)
{
    var eles = document.getElementsByTagName("table");
    var strParamTableId = "ParametersGridReportViewerControl";
    var tblParameters = null;
    var ParamLabels = null;


    for(var j = 0; j < eles.length; ++j)
    {
        // console.log(eles[j]);

        if(eles[j] != null && eles[j].id != null)
        {
            if(eles[j].id.slice(0, strParamTableId.length) == strParamTableId) // if startswith str
            {
                // console.log(eles[j].id);
                tblParameters = eles[j];
                break;
            }
            // else console.log(eles[j].id);
        } // End if(eles[j] != null && eles[j].id != null)

    } // Next j


    if(tblParameters != null)
        ParamLabels = tblParameters.getElementsByTagName("span");

    // var ParamLabels = document.querySelectorAll("table[id^='ParametersGridReportViewerControl'] span");
    if(ParamLabels != null)
    {
        for(var i = 0; i < ParamLabels.length; ++i)
        {
            var strText = ParamLabels[i].innerHTML;

            if (strText != null && strText.indexOf('/') != -1 && strText.indexOf('<input') == -1 ) 
            {
                strText = strText.split('/');
                if (iLanguageIndex < strText.length)
                    strText = strText[iLanguageIndex];
                else 
                { 
                    if(strText.length > 0)
                        strText = strText[0];
                }

                ParamLabels[i].innerHTML = strText;
            } // End if (strText != null && strText.indexOf('/') != -1) 

        } // Next i

    } // End if(ParamLabels != null)

}


function fixReportingServices(container)
{
    var language = initLanguage();

    switch (language)
    {
        case "fr":
            iLanguageIndex = 1;
            break;
        case "it":
            iLanguageIndex = 2;
            break;
        case "en":
            iLanguageIndex = 3;
            break;
        default: // "DE" 
            iLanguageIndex = 0;
    } // End Switch

    TranslateParameterPrompts(iLanguageIndex);
}


// needed when AsyncEnabled=true. 
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function () { fixReportingServices('rpt-container'); });

  </script>

ここで、これを一部のWebページで使用するには、ifrmSSRS_Loginというiframeを作成し(または好みに合わせて調整し)、リンククリックでフォーム投稿を行います。

var data = 
{
    "issued" : datetime 
   ,"databaseName" : "foo" // name of SSRS-user 
   ,parameters : [{ "name":"forms_userid", value: 123},{ "name": "parameter1", "value": "uid1,uid2,uid3" }]
}


var valueToPost = rsa(data, public_key)

post this value with JavaScript to the cross-domain SSRS-url 



    _postSSRS: function(o){
        this._Trace('_postSSRS');

        try{
            if(!!o.SSRS_Link){
                var tF = document.body.appendChild(document.createElement('form'));
                tF.setAttribute('id', 'frm_' + Date.now());
                tF.setAttribute('method', 'post');
                tF.setAttribute('action', o.SSRS_Link + 'logon.aspx');
                tF.setAttribute('style', 'display: none;');
                tF.setAttribute('target', 'ifrmSSRS_Login');

                var HttpPostVariables = {
                     'data': o.SSRS_Data 
                    ,'SSO': 'FMS'
                };

                for(var k in HttpPostVariables){
                    var tH = tF.appendChild(document.createElement('input'));
                    tH.setAttribute('name', k);
                    tH.setAttribute('value', HttpPostVariables[k])
                };

                tF.submit()
            }
        }
        catch(err){this._Log(err, '_postSSRS')}
    },

そうすれば、SSRSを使用して認証をブリッジでき、さらに各顧客(データベース名)のユーザーにはレポート(データベース名によるssrsの権限)のみが表示されます。

uidは小文字で渡す必要があることに注意してください。そうしないと、SSRSが正しく動作することを拒否したり、ソフトウェアの安っぽい部分のように爆発したりするためです。

注意:
そのコードは、SSRSの複数のバージョンで長期間にわたって蓄積され、http-moduleがユーザーエージェント言語をオーバーライドする場合は、page-initialize-cultureをオーバーライドする必要がなくなります(オーバーライドするページを認識した後でのみ理解できました)。 -initialize-cultureはSSRSdatepickerには十分ではありません)。
また、翻訳の区切り文字としてスラッシュを使用するのは残念でした。 £や¦など、不要な文字を使用してみてください。

Windows-10以外のコンピューター上のIE11がauth-cookieを拒否しないようにP3Pヘッダーが必要です(ssrsはクロスドメインiframeで実行されるため、IEによってサードパーティのcookieとして処理されます)。

また、SSRS 2016+を使用します。そうしないと、境界線の幅、高さ、余白、印刷機能の非表示、その他のあらゆる種類の「エキサイティングなIE8固有のもの」などの癖モード機能が必要になるためです。

アセンブリ名が示すように、これは本番サーバー(SSRS 2012)に対して行われ、すべて醜いSSRS2005ハックから進化しました。

ナビゲーションテーブルのフィールドにリンクを保存します。たとえば、T_NavigationのフィールドNA_Linkとして保存します。
'{@report} Budget_SNB&in_user = {@ user}&in_sprache = {@ language}&rc:Stylesheet = COR_RS2012_v7'
baseLink、ユーザー、言語のプレースホルダーを使用し、スタイルシートを設定します(背景が黒の場合は、スタイルシートの変更を使用するようにssrsに指示する必要があります)

SELECT 
    REPLACE(
    REPLACE( 
    REPLACE(NA_Link, '{@report}', @reportServerBaseUrl) 
    , '{@user}', @user_id)
    , '{@language}', @user_language)
FROM T_Navigation 

また、.NET-Frameworkには、コロンを含むリンクをリダイレクトする必要がある場合に問題があることに注意してください。
モノプロジェクトからURLリダイレクトの作業コードをコピーできます。

また、ユーザーIDを文字列/数値として渡すことはできないことに注意してください。暗号化(プライベート/パブリック)する必要があるため、誰もユーザーIDを推測することはできません。 しかし、最初に、ユーザーIDのmd5-hashでうまくいくかもしれません。

@ststeiger @all
AspNetCore.ReportViewerました
これにはLocalReportServerReport

@ amh1979 :いい仕事だ-見てみよう。
WindowsBaseを必要とする依存関係AspNetCore.ReportingServices.dllから取得し、advapi32.dll / kernel32.dll / ReportingServicesService.exeを呼び出します。これは、Framwork 4がインストールされた.NETのWindowsでのみ機能しますか?

PS:正しい英語は「AspNetCore.ReportViewerが<AspNetCore.Reportingに置き換えられました」であり、「代わりに」ではありませんが、私はあなたが意味することを理解しています;)
または、「によってスーパーシードされた」と言うこともできます。これは、探している単語/フレーズである可能性があります;)

@ amh1979 :フレームワーク4.7.1がインストールされていないため、
MainStreamはresult / htmlで、SecondaryStreamはCSSです。
しかし、それを稼働させました。
HTMLがページングされていることも素晴らしいです。
ご存知ですか:すべてのページに対してレンダリング関数を呼び出さずに、すべての結果をループしたり、1つの巨大なHTMLファイルを取得したりする方法はありますか?

@ALL :これは完全な.netで実行されますが、Windowsの
System.Drawing.Color ToKnownColor、IsSystemColorに問題があり、KnownColorが存在しません。
これを修正しましたが、署名付きのアセンブリSystem.Drawing.Graphicsを読み込めないという不満があります...

Windowsの.NETCoreプロジェクトで完全なFULL.netアセンブリを実行する方法もありますか?

@ststeiger次のバージョンでこれらの質問を更新して修正します。

@ amh1979

あなたがそれでありながら、あなたが検索した場合と置き換えるSystem.Array.Empty<T>してArrayExtension.Empty<T> .NET 4.0で動作するようにそれを得るための方法のあなたに、その後、している90%。

    internal static class ArrayExtension
    {

        public static T[] Empty<T>()
        {
            return new T[0];
        }

    }

@ amh1979

それは以下を使用します

System.Drawing.Color c; 
c.IsKnownColor
c.IsSystemColor 
c.ToKnownColor()
System.Drawing.KnownColor enum

.NETCoreのSystem.Drawing.Commonは実装していません。
これがSystem.Drawing.KnownColor.csの置き換えです
(あいまいさのために完全ではありませんが、System.Drawing.Colorの内部値にアクセスできない場合は、これが最善の方法です。#ifsを使用して、完全な.netフレームワークが完全な場合は実際のプロパティを呼び出すようにすることができます。ネットフレームワーク ... )


namespace AspNetCore.Reporting.Helpers
{

    // System.Drawing.KnownColor.cs replacement 
    internal class ReportColor
    {


        private static System.Collections.Generic.Dictionary<System.Drawing.Color
                    , AspNetCore.Reporting.Helpers.AllKnownColors> SetupKnownColorDictionary()
        {
            System.Collections.Generic.Dictionary<System.Drawing.Color
                , AspNetCore.Reporting.Helpers.AllKnownColors>
                dict = new System.Collections.Generic.Dictionary
                <System.Drawing.Color, AspNetCore.Reporting.Helpers.AllKnownColors>();

            dict.Add(System.Drawing.Color.FromArgb(255, 180, 180, 180), AllKnownColors.ActiveBorder);
            dict.Add(System.Drawing.Color.FromArgb(255, 153, 180, 209), AllKnownColors.ActiveCaption);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 0, 0), AllKnownColors.ActiveCaptionText);
            dict.Add(System.Drawing.Color.FromArgb(255, 171, 171, 171), AllKnownColors.AppWorkspace);
            dict.Add(System.Drawing.Color.FromArgb(255, 240, 240, 240), AllKnownColors.Control);
            dict.Add(System.Drawing.Color.FromArgb(255, 160, 160, 160), AllKnownColors.ControlDark);
            dict.Add(System.Drawing.Color.FromArgb(255, 105, 105, 105), AllKnownColors.ControlDarkDark);
            dict.Add(System.Drawing.Color.FromArgb(255, 227, 227, 227), AllKnownColors.ControlLight);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 255, 255), AllKnownColors.ControlLightLight);
            dict.Add(System.Drawing.Color.FromArgb(255, 109, 109, 109), AllKnownColors.GrayText);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 120, 215), AllKnownColors.Highlight);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 102, 204), AllKnownColors.HotTrack);
            dict.Add(System.Drawing.Color.FromArgb(255, 244, 247, 252), AllKnownColors.InactiveBorder);
            dict.Add(System.Drawing.Color.FromArgb(255, 191, 205, 219), AllKnownColors.InactiveCaption);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 255, 225), AllKnownColors.Info);
            dict.Add(System.Drawing.Color.FromArgb(255, 200, 200, 200), AllKnownColors.ScrollBar);
            dict.Add(System.Drawing.Color.FromArgb(255, 100, 100, 100), AllKnownColors.WindowFrame);
            dict.Add(System.Drawing.Color.FromArgb(0, 255, 255, 255), AllKnownColors.Transparent);
            dict.Add(System.Drawing.Color.FromArgb(255, 240, 248, 255), AllKnownColors.AliceBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 250, 235, 215), AllKnownColors.AntiqueWhite);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 255, 255), AllKnownColors.Aqua);
            dict.Add(System.Drawing.Color.FromArgb(255, 127, 255, 212), AllKnownColors.Aquamarine);
            dict.Add(System.Drawing.Color.FromArgb(255, 240, 255, 255), AllKnownColors.Azure);
            dict.Add(System.Drawing.Color.FromArgb(255, 245, 245, 220), AllKnownColors.Beige);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 228, 196), AllKnownColors.Bisque);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 235, 205), AllKnownColors.BlanchedAlmond);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 0, 255), AllKnownColors.Blue);
            dict.Add(System.Drawing.Color.FromArgb(255, 138, 43, 226), AllKnownColors.BlueViolet);
            dict.Add(System.Drawing.Color.FromArgb(255, 165, 42, 42), AllKnownColors.Brown);
            dict.Add(System.Drawing.Color.FromArgb(255, 222, 184, 135), AllKnownColors.BurlyWood);
            dict.Add(System.Drawing.Color.FromArgb(255, 95, 158, 160), AllKnownColors.CadetBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 127, 255, 0), AllKnownColors.Chartreuse);
            dict.Add(System.Drawing.Color.FromArgb(255, 210, 105, 30), AllKnownColors.Chocolate);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 127, 80), AllKnownColors.Coral);
            dict.Add(System.Drawing.Color.FromArgb(255, 100, 149, 237), AllKnownColors.CornflowerBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 248, 220), AllKnownColors.Cornsilk);
            dict.Add(System.Drawing.Color.FromArgb(255, 220, 20, 60), AllKnownColors.Crimson);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 0, 139), AllKnownColors.DarkBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 139, 139), AllKnownColors.DarkCyan);
            dict.Add(System.Drawing.Color.FromArgb(255, 184, 134, 11), AllKnownColors.DarkGoldenrod);
            dict.Add(System.Drawing.Color.FromArgb(255, 169, 169, 169), AllKnownColors.DarkGray);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 100, 0), AllKnownColors.DarkGreen);
            dict.Add(System.Drawing.Color.FromArgb(255, 189, 183, 107), AllKnownColors.DarkKhaki);
            dict.Add(System.Drawing.Color.FromArgb(255, 139, 0, 139), AllKnownColors.DarkMagenta);
            dict.Add(System.Drawing.Color.FromArgb(255, 85, 107, 47), AllKnownColors.DarkOliveGreen);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 140, 0), AllKnownColors.DarkOrange);
            dict.Add(System.Drawing.Color.FromArgb(255, 153, 50, 204), AllKnownColors.DarkOrchid);
            dict.Add(System.Drawing.Color.FromArgb(255, 139, 0, 0), AllKnownColors.DarkRed);
            dict.Add(System.Drawing.Color.FromArgb(255, 233, 150, 122), AllKnownColors.DarkSalmon);
            dict.Add(System.Drawing.Color.FromArgb(255, 143, 188, 139), AllKnownColors.DarkSeaGreen);
            dict.Add(System.Drawing.Color.FromArgb(255, 72, 61, 139), AllKnownColors.DarkSlateBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 47, 79, 79), AllKnownColors.DarkSlateGray);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 206, 209), AllKnownColors.DarkTurquoise);
            dict.Add(System.Drawing.Color.FromArgb(255, 148, 0, 211), AllKnownColors.DarkViolet);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 20, 147), AllKnownColors.DeepPink);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 191, 255), AllKnownColors.DeepSkyBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 30, 144, 255), AllKnownColors.DodgerBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 178, 34, 34), AllKnownColors.Firebrick);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 250, 240), AllKnownColors.FloralWhite);
            dict.Add(System.Drawing.Color.FromArgb(255, 34, 139, 34), AllKnownColors.ForestGreen);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 0, 255), AllKnownColors.Fuchsia);
            dict.Add(System.Drawing.Color.FromArgb(255, 220, 220, 220), AllKnownColors.Gainsboro);
            dict.Add(System.Drawing.Color.FromArgb(255, 248, 248, 255), AllKnownColors.GhostWhite);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 215, 0), AllKnownColors.Gold);
            dict.Add(System.Drawing.Color.FromArgb(255, 218, 165, 32), AllKnownColors.Goldenrod);
            dict.Add(System.Drawing.Color.FromArgb(255, 128, 128, 128), AllKnownColors.Gray);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 128, 0), AllKnownColors.Green);
            dict.Add(System.Drawing.Color.FromArgb(255, 173, 255, 47), AllKnownColors.GreenYellow);
            dict.Add(System.Drawing.Color.FromArgb(255, 240, 255, 240), AllKnownColors.Honeydew);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 105, 180), AllKnownColors.HotPink);
            dict.Add(System.Drawing.Color.FromArgb(255, 205, 92, 92), AllKnownColors.IndianRed);
            dict.Add(System.Drawing.Color.FromArgb(255, 75, 0, 130), AllKnownColors.Indigo);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 255, 240), AllKnownColors.Ivory);
            dict.Add(System.Drawing.Color.FromArgb(255, 240, 230, 140), AllKnownColors.Khaki);
            dict.Add(System.Drawing.Color.FromArgb(255, 230, 230, 250), AllKnownColors.Lavender);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 240, 245), AllKnownColors.LavenderBlush);
            dict.Add(System.Drawing.Color.FromArgb(255, 124, 252, 0), AllKnownColors.LawnGreen);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 250, 205), AllKnownColors.LemonChiffon);
            dict.Add(System.Drawing.Color.FromArgb(255, 173, 216, 230), AllKnownColors.LightBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 240, 128, 128), AllKnownColors.LightCoral);
            dict.Add(System.Drawing.Color.FromArgb(255, 224, 255, 255), AllKnownColors.LightCyan);
            dict.Add(System.Drawing.Color.FromArgb(255, 250, 250, 210), AllKnownColors.LightGoldenrodYellow);
            dict.Add(System.Drawing.Color.FromArgb(255, 211, 211, 211), AllKnownColors.LightGray);
            dict.Add(System.Drawing.Color.FromArgb(255, 144, 238, 144), AllKnownColors.LightGreen);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 182, 193), AllKnownColors.LightPink);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 160, 122), AllKnownColors.LightSalmon);
            dict.Add(System.Drawing.Color.FromArgb(255, 32, 178, 170), AllKnownColors.LightSeaGreen);
            dict.Add(System.Drawing.Color.FromArgb(255, 135, 206, 250), AllKnownColors.LightSkyBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 119, 136, 153), AllKnownColors.LightSlateGray);
            dict.Add(System.Drawing.Color.FromArgb(255, 176, 196, 222), AllKnownColors.LightSteelBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 255, 224), AllKnownColors.LightYellow);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 255, 0), AllKnownColors.Lime);
            dict.Add(System.Drawing.Color.FromArgb(255, 50, 205, 50), AllKnownColors.LimeGreen);
            dict.Add(System.Drawing.Color.FromArgb(255, 250, 240, 230), AllKnownColors.Linen);
            dict.Add(System.Drawing.Color.FromArgb(255, 128, 0, 0), AllKnownColors.Maroon);
            dict.Add(System.Drawing.Color.FromArgb(255, 102, 205, 170), AllKnownColors.MediumAquamarine);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 0, 205), AllKnownColors.MediumBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 186, 85, 211), AllKnownColors.MediumOrchid);
            dict.Add(System.Drawing.Color.FromArgb(255, 147, 112, 219), AllKnownColors.MediumPurple);
            dict.Add(System.Drawing.Color.FromArgb(255, 60, 179, 113), AllKnownColors.MediumSeaGreen);
            dict.Add(System.Drawing.Color.FromArgb(255, 123, 104, 238), AllKnownColors.MediumSlateBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 250, 154), AllKnownColors.MediumSpringGreen);
            dict.Add(System.Drawing.Color.FromArgb(255, 72, 209, 204), AllKnownColors.MediumTurquoise);
            dict.Add(System.Drawing.Color.FromArgb(255, 199, 21, 133), AllKnownColors.MediumVioletRed);
            dict.Add(System.Drawing.Color.FromArgb(255, 25, 25, 112), AllKnownColors.MidnightBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 245, 255, 250), AllKnownColors.MintCream);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 228, 225), AllKnownColors.MistyRose);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 228, 181), AllKnownColors.Moccasin);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 222, 173), AllKnownColors.NavajoWhite);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 0, 128), AllKnownColors.Navy);
            dict.Add(System.Drawing.Color.FromArgb(255, 253, 245, 230), AllKnownColors.OldLace);
            dict.Add(System.Drawing.Color.FromArgb(255, 128, 128, 0), AllKnownColors.Olive);
            dict.Add(System.Drawing.Color.FromArgb(255, 107, 142, 35), AllKnownColors.OliveDrab);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 165, 0), AllKnownColors.Orange);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 69, 0), AllKnownColors.OrangeRed);
            dict.Add(System.Drawing.Color.FromArgb(255, 218, 112, 214), AllKnownColors.Orchid);
            dict.Add(System.Drawing.Color.FromArgb(255, 238, 232, 170), AllKnownColors.PaleGoldenrod);
            dict.Add(System.Drawing.Color.FromArgb(255, 152, 251, 152), AllKnownColors.PaleGreen);
            dict.Add(System.Drawing.Color.FromArgb(255, 175, 238, 238), AllKnownColors.PaleTurquoise);
            dict.Add(System.Drawing.Color.FromArgb(255, 219, 112, 147), AllKnownColors.PaleVioletRed);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 239, 213), AllKnownColors.PapayaWhip);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 218, 185), AllKnownColors.PeachPuff);
            dict.Add(System.Drawing.Color.FromArgb(255, 205, 133, 63), AllKnownColors.Peru);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 192, 203), AllKnownColors.Pink);
            dict.Add(System.Drawing.Color.FromArgb(255, 221, 160, 221), AllKnownColors.Plum);
            dict.Add(System.Drawing.Color.FromArgb(255, 176, 224, 230), AllKnownColors.PowderBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 128, 0, 128), AllKnownColors.Purple);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 0, 0), AllKnownColors.Red);
            dict.Add(System.Drawing.Color.FromArgb(255, 188, 143, 143), AllKnownColors.RosyBrown);
            dict.Add(System.Drawing.Color.FromArgb(255, 65, 105, 225), AllKnownColors.RoyalBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 139, 69, 19), AllKnownColors.SaddleBrown);
            dict.Add(System.Drawing.Color.FromArgb(255, 250, 128, 114), AllKnownColors.Salmon);
            dict.Add(System.Drawing.Color.FromArgb(255, 244, 164, 96), AllKnownColors.SandyBrown);
            dict.Add(System.Drawing.Color.FromArgb(255, 46, 139, 87), AllKnownColors.SeaGreen);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 245, 238), AllKnownColors.SeaShell);
            dict.Add(System.Drawing.Color.FromArgb(255, 160, 82, 45), AllKnownColors.Sienna);
            dict.Add(System.Drawing.Color.FromArgb(255, 192, 192, 192), AllKnownColors.Silver);
            dict.Add(System.Drawing.Color.FromArgb(255, 135, 206, 235), AllKnownColors.SkyBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 106, 90, 205), AllKnownColors.SlateBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 112, 128, 144), AllKnownColors.SlateGray);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 250, 250), AllKnownColors.Snow);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 255, 127), AllKnownColors.SpringGreen);
            dict.Add(System.Drawing.Color.FromArgb(255, 70, 130, 180), AllKnownColors.SteelBlue);
            dict.Add(System.Drawing.Color.FromArgb(255, 210, 180, 140), AllKnownColors.Tan);
            dict.Add(System.Drawing.Color.FromArgb(255, 0, 128, 128), AllKnownColors.Teal);
            dict.Add(System.Drawing.Color.FromArgb(255, 216, 191, 216), AllKnownColors.Thistle);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 99, 71), AllKnownColors.Tomato);
            dict.Add(System.Drawing.Color.FromArgb(255, 64, 224, 208), AllKnownColors.Turquoise);
            dict.Add(System.Drawing.Color.FromArgb(255, 238, 130, 238), AllKnownColors.Violet);
            dict.Add(System.Drawing.Color.FromArgb(255, 245, 222, 179), AllKnownColors.Wheat);
            dict.Add(System.Drawing.Color.FromArgb(255, 245, 245, 245), AllKnownColors.WhiteSmoke);
            dict.Add(System.Drawing.Color.FromArgb(255, 255, 255, 0), AllKnownColors.Yellow);
            dict.Add(System.Drawing.Color.FromArgb(255, 154, 205, 50), AllKnownColors.YellowGreen);
            dict.Add(System.Drawing.Color.FromArgb(255, 185, 209, 234), AllKnownColors.GradientActiveCaption);
            dict.Add(System.Drawing.Color.FromArgb(255, 215, 228, 242), AllKnownColors.GradientInactiveCaption);

            return dict;
        } // End Function SetupKnownColorDictionary 


        private static System.Collections.Generic.HashSet<System.Drawing.Color> SetupSystemColorHashMap()
        {
            System.Collections.Generic.HashSet<System.Drawing.Color> hash =
                new System.Collections.Generic.HashSet<System.Drawing.Color>(
                    new System.Drawing.Color[] {
                        System.Drawing.Color.FromArgb(255, 180, 180, 180),
                        System.Drawing.Color.FromArgb(255, 153, 180, 209),
                        System.Drawing.Color.FromArgb(255, 0, 0, 0),
                        System.Drawing.Color.FromArgb(255, 171, 171, 171),
                        System.Drawing.Color.FromArgb(255, 240, 240, 240),
                        System.Drawing.Color.FromArgb(255, 160, 160, 160),
                        System.Drawing.Color.FromArgb(255, 105, 105, 105),
                        System.Drawing.Color.FromArgb(255, 227, 227, 227),
                        System.Drawing.Color.FromArgb(255, 255, 255, 255),
                        System.Drawing.Color.FromArgb(255, 109, 109, 109),
                        System.Drawing.Color.FromArgb(255, 0, 120, 215),
                        System.Drawing.Color.FromArgb(255, 0, 102, 204),
                        System.Drawing.Color.FromArgb(255, 244, 247, 252),
                        System.Drawing.Color.FromArgb(255, 191, 205, 219),
                        System.Drawing.Color.FromArgb(255, 255, 255, 225),
                        System.Drawing.Color.FromArgb(255, 200, 200, 200),
                        System.Drawing.Color.FromArgb(255, 100, 100, 100),
                        System.Drawing.Color.FromArgb(255, 185, 209, 234),
                        System.Drawing.Color.FromArgb(255, 215, 228, 242)
                    }
            );

            return hash;
        } // End Function SetupSystemColorHashMap 


        private static System.Collections.Generic.HashSet<string> SetupKnownColorHashMap()
        {
            System.Collections.Generic.HashSet<string> map =
                new System.Collections.Generic.HashSet<string>(new string[] {
 "ActiveBorder"
,"ActiveCaption"
,"ActiveCaptionText"
,"AppWorkspace"
,"Control"
,"ControlDark"
,"ControlDarkDark"
,"ControlLight"
,"ControlLightLight"
,"ControlText"
,"Desktop"
,"GrayText"
,"Highlight"
,"HighlightText"
,"HotTrack"
,"InactiveBorder"
,"InactiveCaption"
,"InactiveCaptionText"
,"Info"
,"InfoText"
,"Menu"
,"MenuText"
,"ScrollBar"
,"Window"
,"WindowFrame"
,"WindowText"
,"Transparent"
,"AliceBlue"
,"AntiqueWhite"
,"Aqua"
,"Aquamarine"
,"Azure"
,"Beige"
,"Bisque"
,"Black"
,"BlanchedAlmond"
,"Blue"
,"BlueViolet"
,"Brown"
,"BurlyWood"
,"CadetBlue"
,"Chartreuse"
,"Chocolate"
,"Coral"
,"CornflowerBlue"
,"Cornsilk"
,"Crimson"
,"Cyan"
,"DarkBlue"
,"DarkCyan"
,"DarkGoldenrod"
,"DarkGray"
,"DarkGreen"
,"DarkKhaki"
,"DarkMagenta"
,"DarkOliveGreen"
,"DarkOrange"
,"DarkOrchid"
,"DarkRed"
,"DarkSalmon"
,"DarkSeaGreen"
,"DarkSlateBlue"
,"DarkSlateGray"
,"DarkTurquoise"
,"DarkViolet"
,"DeepPink"
,"DeepSkyBlue"
,"DimGray"
,"DodgerBlue"
,"Firebrick"
,"FloralWhite"
,"ForestGreen"
,"Fuchsia"
,"Gainsboro"
,"GhostWhite"
,"Gold"
,"Goldenrod"
,"Gray"
,"Green"
,"GreenYellow"
,"Honeydew"
,"HotPink"
,"IndianRed"
,"Indigo"
,"Ivory"
,"Khaki"
,"Lavender"
,"LavenderBlush"
,"LawnGreen"
,"LemonChiffon"
,"LightBlue"
,"LightCoral"
,"LightCyan"
,"LightGoldenrodYellow"
,"LightGray"
,"LightGrey"
,"LightGreen"
,"LightPink"
,"LightSalmon"
,"LightSeaGreen"
,"LightSkyBlue"
,"LightSlateGray"
,"LightSteelBlue"
,"LightYellow"
,"Lime"
,"LimeGreen"
,"Linen"
,"Magenta"
,"Maroon"
,"MediumAquamarine"
,"MediumBlue"
,"MediumOrchid"
,"MediumPurple"
,"MediumSeaGreen"
,"MediumSlateBlue"
,"MediumSpringGreen"
,"MediumTurquoise"
,"MediumVioletRed"
,"MidnightBlue"
,"MintCream"
,"MistyRose"
,"Moccasin"
,"NavajoWhite"
,"Navy"
,"OldLace"
,"Olive"
,"OliveDrab"
,"Orange"
,"OrangeRed"
,"Orchid"
,"PaleGoldenrod"
,"PaleGreen"
,"PaleTurquoise"
,"PaleVioletRed"
,"PapayaWhip"
,"PeachPuff"
,"Peru"
,"Pink"
,"Plum"
,"PowderBlue"
,"Purple"
,"Red"
,"RosyBrown"
,"RoyalBlue"
,"SaddleBrown"
,"Salmon"
,"SandyBrown"
,"SeaGreen"
,"SeaShell"
,"Sienna"
,"Silver"
,"SkyBlue"
,"SlateBlue"
,"SlateGray"
,"Snow"
,"SpringGreen"
,"SteelBlue"
,"Tan"
,"Teal"
,"Thistle"
,"Tomato"
,"Turquoise"
,"Violet"
,"Wheat"
,"White"
,"WhiteSmoke"
,"Yellow"
,"YellowGreen"
,"ButtonFace"
,"ButtonHighlight"
,"ButtonShadow"
,"GradientActiveCaption"
,"GradientInactiveCaption"
,"MenuBar"
,"MenuHighlight"

}, System.StringComparer.OrdinalIgnoreCase);

            return map;
        } // End Function SetupKnownColorHashMap 


        private static System.Collections.Generic.HashSet<string> m_knownColors = SetupKnownColorHashMap();
        private static System.Collections.Generic.HashSet<System.Drawing.Color> m_systemColors = SetupSystemColorHashMap();

        private static System.Collections.Generic.Dictionary<System.Drawing.Color
                , AspNetCore.Reporting.Helpers.AllKnownColors> m_knownColorDictionary = SetupKnownColorDictionary();


        // System.Drawing.Color c; c.IsKnownColor
        public static bool IsKnownColor(string color)
        {
            return m_knownColors.Contains(color);
        } // End Function IsKnownColor


        // System.Drawing.Color c; c.ToKnownColor()
        // AspNetCore.Reporting.Helpers.ReportColor.ToKnownColor(c);
        public static AspNetCore.Reporting.Helpers.AllKnownColors ToKnownColor(System.Drawing.Color c)
        {
            //System.Drawing.KnownColor knownColor = c.ToKnownColor();
            if (m_knownColorDictionary.ContainsKey(c))
                return m_knownColorDictionary[c];

            return AspNetCore.Reporting.Helpers.AllKnownColors.Unknown;
        } // End Function ToKnownColor 


        // System.Drawing.Color c; c.IsSystemColor 

        /// <include file='doc\Color.uex' path='docs/doc[@for="Color.IsSystemColor"]/*' />
        /// <devdoc>
        ///     Determines if this color is a system color.
        /// </devdoc>
        public static bool IsSystemColor(System.Drawing.Color color)
        {
            if (m_systemColors.Contains(color))
                return true;

            // return color.IsKnownColor;
            // return IsKnownColor && ((((KnownColor)knownColor) <= KnownColor.WindowText) || (((KnownColor)knownColor) > KnownColor.YellowGreen));
            return false;
        } // End Function IsSystemColor 


    } // End Class ReportColor 



    // https://raw.githubusercontent.com/mono/sysdrawing-coregraphics/master/System.Drawing/KnownColor.cs
    public enum AllKnownColors
    {
        Unknown = 0,

        ActiveBorder = 1,
        ActiveCaption = 2,
        ActiveCaptionText = 3,
        AppWorkspace = 4,
        Control = 5,
        ControlDark = 6,
        ControlDarkDark = 7,
        ControlLight = 8,
        ControlLightLight = 9,
        ControlText = 10,
        Desktop = 11,
        GrayText = 12,
        Highlight = 13,
        HighlightText = 14,
        HotTrack = 15,
        InactiveBorder = 16,
        InactiveCaption = 17,
        InactiveCaptionText = 18,
        Info = 19,
        InfoText = 20,
        Menu = 21,
        MenuText = 22,
        ScrollBar = 23,
        Window = 24,
        WindowFrame = 25,
        WindowText = 26,
        Transparent = 27,
        AliceBlue = 28,
        AntiqueWhite = 29,
        Aqua = 30,
        Aquamarine = 31,
        Azure = 32,
        Beige = 33,
        Bisque = 34,
        Black = 35,
        BlanchedAlmond = 36,
        Blue = 37,
        BlueViolet = 38,
        Brown = 39,
        BurlyWood = 40,
        CadetBlue = 41,
        Chartreuse = 42,
        Chocolate = 43,
        Coral = 44,
        CornflowerBlue = 45,
        Cornsilk = 46,
        Crimson = 47,
        Cyan = 48,
        DarkBlue = 49,
        DarkCyan = 50,
        DarkGoldenrod = 51,
        DarkGray = 52,
        DarkGreen = 53,
        DarkKhaki = 54,
        DarkMagenta = 55,
        DarkOliveGreen = 56,
        DarkOrange = 57,
        DarkOrchid = 58,
        DarkRed = 59,
        DarkSalmon = 60,
        DarkSeaGreen = 61,
        DarkSlateBlue = 62,
        DarkSlateGray = 63,
        DarkTurquoise = 64,
        DarkViolet = 65,
        DeepPink = 66,
        DeepSkyBlue = 67,
        DimGray = 68,
        DodgerBlue = 69,
        Firebrick = 70,
        FloralWhite = 71,
        ForestGreen = 72,
        Fuchsia = 73,
        Gainsboro = 74,
        GhostWhite = 75,
        Gold = 76,
        Goldenrod = 77,
        Gray = 78,
        Green = 79,
        GreenYellow = 80,
        Honeydew = 81,
        HotPink = 82,
        IndianRed = 83,
        Indigo = 84,
        Ivory = 85,
        Khaki = 86,
        Lavender = 87,
        LavenderBlush = 88,
        LawnGreen = 89,
        LemonChiffon = 90,
        LightBlue = 91,
        LightCoral = 92,
        LightCyan = 93,
        LightGoldenrodYellow = 94,
        LightGray = 95,
        LightGreen = 96,
        LightPink = 97,
        LightSalmon = 98,
        LightSeaGreen = 99,
        LightSkyBlue = 100,
        LightSlateGray = 101,
        LightSteelBlue = 102,
        LightYellow = 103,
        Lime = 104,
        LimeGreen = 105,
        Linen = 106,
        Magenta = 107,
        Maroon = 108,
        MediumAquamarine = 109,
        MediumBlue = 110,
        MediumOrchid = 111,
        MediumPurple = 112,
        MediumSeaGreen = 113,
        MediumSlateBlue = 114,
        MediumSpringGreen = 115,
        MediumTurquoise = 116,
        MediumVioletRed = 117,
        MidnightBlue = 118,
        MintCream = 119,
        MistyRose = 120,
        Moccasin = 121,
        NavajoWhite = 122,
        Navy = 123,
        OldLace = 124,
        Olive = 125,
        OliveDrab = 126,
        Orange = 127,
        OrangeRed = 128,
        Orchid = 129,
        PaleGoldenrod = 130,
        PaleGreen = 131,
        PaleTurquoise = 132,
        PaleVioletRed = 133,
        PapayaWhip = 134,
        PeachPuff = 135,
        Peru = 136,
        Pink = 137,
        Plum = 138,
        PowderBlue = 139,
        Purple = 140,
        Red = 141,
        RosyBrown = 142,
        RoyalBlue = 143,
        SaddleBrown = 144,
        Salmon = 145,
        SandyBrown = 146,
        SeaGreen = 147,
        SeaShell = 148,
        Sienna = 149,
        Silver = 150,
        SkyBlue = 151,
        SlateBlue = 152,
        SlateGray = 153,
        Snow = 154,
        SpringGreen = 155,
        SteelBlue = 156,
        Tan = 157,
        Teal = 158,
        Thistle = 159,
        Tomato = 160,
        Turquoise = 161,
        Violet = 162,
        Wheat = 163,
        White = 164,
        WhiteSmoke = 165,
        Yellow = 166,
        YellowGreen = 167,
        ButtonFace = 168,
        ButtonHighlight = 169,
        ButtonShadow = 170,
        GradientActiveCaption = 171,
        GradientInactiveCaption = 172,
        MenuBar = 173,
        MenuHighlight = 174
    } // End enum AllKnownColors 


}

NetStandard2.0でコンパイルしています

方法:
System.CoreFX.Formsを取得し、NetStandard2.0に変換します。 次に、System.Drawing.CommonとSystem.Reflection.Emitを追加します。

AspNetCore.ReportingServicesを取得し、追加します

Microsoft.Win32.Registry
System.CodeDom
System.ComponentModel
System.ComponentModel.TypeConverter
System.Configuration.ConfigurationManager
System.Data.Common
System.Data.SqlClient
System.Drawing.Common 
System.IO.Packaging
System.Runtime.Serialization.Primitives
System.Security.Permissions

System.CoreFX.Forms(NetStandard)への参照を追加します

mono / corefxから次のファイルを取得します

AssemblyRef.cs (corefx System.Drawing)
ColorConverter.cs (corefx System.Drawing)
ColorConverterCommon.cs (corefx System.Drawing)
ColorTable.cs (corefx System.Drawing)
FontConverter.cs (mono System.Drawing.FontConverter.cs)
ImageFormatConverter.cs (mono System.Drawing.ImageFormatConverter.cs)
PaintValueEventArgs.cs (corefx System.Drawing.Design)
PointConverter.cs (corefx System.Drawing.Design)
SizeConverter.cs (corefx System.Drawing.Design)
UITypeEditor.cs  (corefx System.Drawing.Design "Primitives")
UITypeEditorEditStyle.cs  (corefx System.Drawing.Design "Primitives")

そして、System.Webのラッパークラスを追加します


namespace System.Web
{

    public class HttpRequest
    {
        public System.Collections.Specialized.NameValueCollection Headers { get; set; }
    }

    public class HttpResponse
    {
        public string ContentType { get; set; }
        public int StatusCode { get; set; }
    }

    public class HttpContext
    {
        // public HttpRequest Request;
        // public HttpRequest Response;

        public HttpRequest Request { get; set; }
        public HttpResponse Response { get; set; }


        public static HttpContext Current;
    }
}

そして、新しいnetstandard2.0プロジェクトで安全でないコードを許可します。

次に、AssemblyInfo.csを追加します

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("AspNetCore.Reporting, PublicKey=00240000048000009400000006020000002400005253413100040000010001003736e45ce2a56cd06bc9ab2e7eeeeffd2533eaafbc1abc68561da0f512412bf1c7d2bd0c4422565a4f35818a205b4d54af1d0fef14fb8d7249bc37913e53a3313c2f26ca838849c5ef766082ed02db74e6459e77840dfe5eb01574aa0722876b2a9f714c5d03fbcea6e88345ccf55a87d57d9653a5913a826008b1d3ac557aab", AllInternalsVisible = true)]
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("AspNetCore.Reporting", AllInternalsVisible = true)]

そして今、それはNetStandard2.0でコンパイルされます。

ねえ@すべての素晴らしいニュース:

Windows上の.NETCoreで動作します!
100%NetStandard、0%NetFramework

Html、Pdf、Excel、Excel2007 +、Word、Word2007 +、およびtiffはすべて、varchars、ints、tinyint2、bits、および計算列を含む57ページの表形式のレポートで正常に機能しました。
RDLを除いて、すべての出力形式が機能します。RDLはちょっと面白いですが、誰が気にしますか。
最終的には問題が見つかりますね。

AspNetCore.Reporting.LocalReport lr = new AspNetCore.Reporting.LocalReport(fn);
lr.AddDataSource("DataSet1", dt);

var rr = lr.Execute(AspNetCore.Reporting.RenderType.WordOpenXml, 1, null, "");

// var rr = lr.Execute(AspNetCore.Reporting.RenderType.Rpl, 1, null, ""); // Kaboom 
// var rr = lr.Execute(AspNetCore.Reporting.RenderType.Html, 2, null, "");
// var rr = lr.Execute(AspNetCore.Reporting.RenderType.Pdf, 1, null, "");
// var rr = lr.Execute(AspNetCore.Reporting.RenderType.Excel, 1, null, "");
// var rr = lr.Execute(AspNetCore.Reporting.RenderType.ExcelOpenXml, 1, null, "");
// var rr = lr.Execute(AspNetCore.Reporting.RenderType.Word, 1, null, "");
// var rr = lr.Execute(AspNetCore.Reporting.RenderType.WordOpenXml, 1, null, "");

System.Console.WriteLine(rr.TotalPages);

// System.IO.File.WriteAllBytes(@"d:\foo.htm", rr.MainStream);
// System.IO.File.WriteAllBytes(@"d:\foo.css", rr.SecondaryStream);
// System.IO.File.WriteAllBytes(@"d:\foo.pdf", rr.MainStream);
// System.IO.File.WriteAllBytes(@"d:\foo.xls", rr.MainStream);
// System.IO.File.WriteAllBytes(@"d:\foo.xlsx", rr.MainStream);
// System.IO.File.WriteAllBytes(@"d:\foo.doc", rr.MainStream);
// System.IO.File.WriteAllBytes(@"d:\foo.docx", rr.MainStream);
// System.IO.File.WriteAllBytes(@"d:\foo.tiff", rr.MainStream);

// System.IO.File.WriteAllBytes(@"d:\foo.rpl", rr.MainStream); // BOOM 

そして、もっと良いニュースがあります:
WindowsBase(別名WPF)は、.NETCoreで使用可能なSystem.IO.Packagingにのみ使用されていました。
つまり、ピンボークを取り除くことができれば、Linux / Macでもこれを機能させるための大きな障害はありません。

今、誰かがすぐにWebベースのRDLエディターを書き始めます!
次に、「動的」(ユーザー生成)レポートを作成することもできます。
PostgreSQL-Linux用のReportingServicesが登場します;)
(わかりました、そのようなことについてダモクレスの合法的な剣があります、しかし私たちがそれを「よりリラックスした」知的財産権を持っている中国から出版することができれば...):)

OK、多分それはあまりにも邪悪です。
代わりに、Microsoft ReportingServices for Oracle / SAPを考えてください!
またはCassandra / SparkのReportingServices:grin:

@ amh1979
そこにPowerPointレンダラーはありませんか?
最新バージョンのreportviewerからビルドしましたか? (SSRS 2017)
nugetで知っている最新バージョン:
https://www.nuget.org/packages/Microsoft.ReportingServices.ReportViewerControl.WebForms
(140.1000.523、10か月前)
https://www.nuget.org/packages/Microsoft.ReportingServices.ReportViewerControl.WinForms
(140.1000.523)
https://www.nuget.org/packages/Microsoft.SqlServer.Types
(14.0.314.76)

NetStandardのCoreFXWinForms実装は次のとおりです。
https://github.com/ststeiger/System.CoreFX.Forms

NetCoreプロジェクトを追加し、System.CoreFX.Formsの名前をSystem.NetStandard.Formsに変更したため、ギャップに注意してください。そうすると、埋め込みリソースの読み込みが困難になる可能性があります。

ファイルはここにあります:

AssemblyRef.cs
ColorConverter.cs
ColorConverterCommon.cs
ColorTable.cs
FontConverter.cs
ImageFormatConverter.cs
PaintValueEventArgs.cs
PointConverter.cs
SizeConverter.cs
UITypeEditor.cs
UITypeEditorEditStyle.cs

@ amh1979
ああ、なるほど、それはMicrosoft.ReportViewer.Common.dllにはありません。
しかし、それはReportServerディレクトリにあります。
Microsoft.ReportingServices.PowerPointRendering.dll
およびCSV / XML / Atomの場合:
Microsoft.ReportingServices.DataRendering.dll

C:\ Program Files \ Microsoft SQL Server Reporting Services \ SSRS \ ReportServer \ bin

@ALL
WordOpenXMLとExcelOpenXMLレンダラーもそうです!
(写真/グラフィックではテストされていません-テキストとコードのみ)

PDFレンダラーには、フォントの埋め込みピンボークに問題があります。
(Word / Excel-2003レンダラーはピンボークを使用しているため、機能しません。)
Aspose Cells / Words evalバージョンを使用する場合は、xlsxをxlsに変換し、docxをdocに変換できます。
ワードファイルからPDFを生成することもできます。
soffice --headless --convert-to pdf filename.docx
(または、aspose evalを使用して)
それについて考えると、PPTXレンダラーも簡単に実行できるはずです。TIFFファイルから写真を撮り、各tiffページの画像をjpg / pngとしてpptxスライドに配置するだけだからです。
画像レンダラーは最も難しいことのようです。
または、wkhtmltoXを使用して、各HTMLページをimage / pdfにレンダリングすることもできます。
しかし、それはおそらく少し遅い側になります。

すごい!

HTML for report

@ALL :Atom / CSV / XMLが機能しています。 NULLレンダラーもそうです。
Linuxでも。

PowerPointレンダリングはWindowsでのみ機能します-ピンボーク

おもしろい事実:そこにはJSONレンダラーがあるようです。
しかし、何らかの理由で、そのがらくたはuseSharedDataSetTableHandlerの場合にのみ機能します。

ParseDeviceInfo(deviceInfo);

if (!useSharedDataSetTableHandler)
{
    throw new ReportRenderingException(StringResources.rrJsonRenderOutputNotSupported);
}

危険にさらされている人は、JSONレンダラーの使用方法を知っていますか?

@ amh1979サーバーレポートを使用しようとしましたが、レポートに追加したパラメーターがLoadReportのサーバーに保持されていないようです。 次のビルドでサーバーに送信されるように設定できる可能性はありますか?

こんにちは@ststeiger@ amh1979 、これについては素晴らしい仕事です。このライブラリの使用方法に関するチュートリアルはありますか? 現在、複数値パラメーターをサポートする方法/サポートしているかどうか、およびドリルダウンがサポートされているかどうかを確認しようとしています。
nugetパッケージの説明(http://www.amhx.org/)にリンクされているサイトにアクセスして確認しようとしていますが、タイムアウトが発生し続けます。

@DavidHayesCoding
ここに、AspNetCore.Reporting.LocalReportのテストコードがあります。これは私が興味を持っているすべてです。
注意:
レンダリングタイプRpl、RGDI、Atom、Xml、Json、Csv、null、pptx
amh1979のアセンブリにはないため、利用できなくなります。
(これらはSSRSの一部ですが、ReportViewer再配布可能ファイルには存在しません)

また、共有データソース(* .rds)は* .rdlと同じディレクトリにある必要があることに注意してください。そうでない場合、LocalReport.Executeでnull参照例外が発生します。

さらに質問がある場合:
https://github.com/icsharpcode/ILSpy/releases/tag/v4.0-beta2
(注:適切なコードでは、使用終了後にデータテーブルを破棄する必要があります)

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;

namespace NetCoreReporting
{


    public class Program
    {


        public static void Main(string[] args)
        {
            System.Data.SqlClient.SqlConnectionStringBuilder csb = new System.Data.SqlClient.SqlConnectionStringBuilder();
            csb.InitialCatalog = "TestDB";

            if ("COMPANY_NAME".Equals(System.Environment.UserDomainName, System.StringComparison.InvariantCultureIgnoreCase))
                csb.DataSource = System.Environment.MachineName + @"\SQLEXPRESS";
            else
                csb.DataSource = System.Environment.MachineName;

            if(System.Environment.OSVersion.Platform == System.PlatformID.Unix)
                csb.IntegratedSecurity = false;
            else
                csb.IntegratedSecurity = true;

            if (!csb.IntegratedSecurity)
            {
                csb.UserID = TestPlotly.SecretManager.GetSecret<string>("DefaultDbUser");
                csb.Password = TestPlotly.SecretManager.GetSecret<string>("DefaultDbPassword");
            }



            string sql = "SELECT * FROM T_Sites";
            // sql = "SELECT * FROM T_Users";

            System.Data.DataTable dt = new System.Data.DataTable();

            using (System.Data.Common.DbDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(sql, csb.ConnectionString))
            {
                da.Fill(dt);
            }

            string fn = "wwwroot/Report1.rdl";
            fn = "wwwroot/Report2.rdl";

            AspNetCore.Reporting.LocalReport lr = new AspNetCore.Reporting.LocalReport(fn);


            System.Collections.Generic.Dictionary<string, string> parameters = 
                new System.Collections.Generic.Dictionary<string, string>();

            // parameters.Add("in_logo", "base64");

            lr.AddDataSource("DataSet1", dt); // DataSet1 is the name of the DataSet in the report




            // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Html, 1, null, "");

            // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Rpl, 1, null, ""); // Kaboom 
            // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Html, 2, null, "");
            // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Pdf, 1, null, "");
            // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Excel, 1, null, "");
            // var rr = lr.Execute(AspNetCore.Reporting.RenderType.ExcelOpenXml, 1, null, "");
            // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Word, 1, null, "");
            // var rr = lr.Execute(AspNetCore.Reporting.RenderType.WordOpenXml, 1, null, "");
            // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Atom, 1, null, "");
            // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Xml, 1, null, "");
            // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Json, 1, null, "");// KABOOM 
            // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Csv, 1, null, "");

            var rr = lr.Execute(AspNetCore.Reporting.RenderType.Pptx, 1, parameters, "");

            System.Console.WriteLine(rr.TotalPages);


            string dir = @"d:\";
            if (System.Environment.OSVersion.Platform == System.PlatformID.Unix)
                dir = "/opt/";

            // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.htm"), rr.MainStream);
            // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.css"), rr.SecondaryStream);
            // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.pdf"), rr.MainStream);
            // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.xls"), rr.MainStream);
            // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.xlsx"), rr.MainStream);
            // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.doc"), rr.MainStream);
            // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.docx"), rr.MainStream);
            // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.tiff"), rr.MainStream);

            // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.atom.xml"), rr.MainStream);
            // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.xml"), rr.MainStream);
            // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.json"), rr.MainStream);
            // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.csv"), rr.MainStream);

            // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.rpl"), rr.MainStream); // BOOM 
            // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.htm"), rr.MainStream);
            System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.pptx"), rr.MainStream);

            BuildWebHost(args).Run();
        }


        public static IWebHost BuildWebHost(string[] args)
        { 
            return WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
        }


    }


}

@ALL :誰か助けたいですか?
この質問に答えてください:
https://stackoverflow.com/questions/52093440/how-to-call-wine-dll-functions-from-c

大量のコードと長さのコメントを投稿することは、この問題を追跡するための非常に読みにくい方法であることを提案できますか?

私は多くの活動と多くのコードを見ることができますが、最近の(一見優れた)開発が何であったかについては実際には賢明ではありません。

ここで物事をきちんと整理し、コードを共有するために別のリポジトリ/適切なツールを使用することを提案できますか? ここで共有される可能性のある、わかりやすくシンプルなステータスの更新はありますか?

@kierenjのように、投稿としてのコードリストはフォローするのを難しくしていると思います。 githubを作成してから、リンクを共有します。 このリポジトリの管理者がいくつかのブランチなどを作成したいかどうかを確認してください...

@kierenj @figuerresそれでいいのですが、最初に許可を求めずに大量の逆コンパイルされたMicrosoftコードを公開すると、おそらく彼らが何かをしたいと思うかもしれない場所に一線を越える危険があります...

iii。 配布制限。 できません
•Windowsプラットフォーム以外のプラットフォームで実行するための配布可能なコードを配布します。
•コードはソースコード形式で開示または配布されます。 または
•他の人はそれを変更する権利を持っています。

@ststeiger
ここでリポジトリを操作してブランチを作成し、そのブランチにコードを配置できます。
それから彼らはそれを持っていてそれについて知っています...

@figuerres :プライベートリポジトリが無料のgitlabでリポジトリを作成しました。

@MaximRouiller
ASP.NET Coreで大まかに動作するバージョンのReportViewer(ローカルレポート)があります。
その約75%は、MicrosoftがSQL-Serverを公開しているLinuxでも機能します。
Linuxで動作する部分は、MacOSでも動作する可能性があります。

ただし、このバージョンのReportViewerは、次のコードに基づいています。
https://www.nuget.org/packages/AspNetCore.Reporting
これはからのコードに基づいているようです
https://www.nuget.org/packages/Microsoft.ReportingServices.ReportViewerControl.WebForms
このライセンスの下にあります
http://go.microsoft.com/fwlink/?LinkId=826162

このライセンスでは、
•Windowsプラットフォーム以外のプラットフォームで実行するための配布可能なコードを配布します。
•コードはソースコード形式で開示または配布されます。 または
•他の人はそれを変更する権利を持っています。
•ソフトウェアの技術的な制限を回避します。
•>リバースエンジニアリングは許可されていません<

コードを改善し、残っている可能性のあるバグを解決して、ReportViewerを.NET Coreに導入する目的で、このコードをgithubのコミュニティと(まだ決定されていない場所で)共有したいと思います。
ただし、ReportViewerControl.WebFormsの現在のライセンスを考慮して、一方的にそのような手順を実行したくありません。

そのライセンスが最初に書かれた/最後に更新されてから、多くのことが変わったと思います。
たとえば、結果がWindowsプラットフォームでのみ機能する場合、.NET Core用のReportViewerを公開することはほとんど意味がありません。また、MicrosoftがLinux用のSQL-Serverをリリースしたことを考えると、SSRSはある時点でとにかくフォローしてください。

また、ASP.NET-CoreがWebFormsを実装していないことを考えると、ReportViewer-WebFormsからReportViewer-NetCoreへの変更はとにかく重大な変更になります。

状況を考慮して、そのような努力に青信号を与え、偶然にも時間と労力を節約し、.NET-Coreのオープンソースの性質とうまく調和するかどうかを個別に尋ねることができますか? NetStandard2.0。

.NET-Coreがリリースされてから2年以上が経過しましたが、広範囲にわたるレポートの解決策はまだありません。 これが修正される時が来ました。
私たちが一緒にそれをするならば、私たちは皆より速くそしてより良くなるでしょう。

http://go.microsoft.com/fwlink/?LinkId=826162
気になること。
そうでない場合は、NuGetからパッケージのリストを解除します。

@ALL
したがって、XLS / DOC-Rendererは現在LinuxとWindowsの両方で動作しています。
現在85%がLinuxに取り組んでいます。

PDFWriterのWinAPI呼び出しは3つ、ImageRenderer / GraphicsのWinAPI呼び出しは13つになっているようです。
PdfWriter自体はかなり簡単かもしれないと思います。

こんにちは@ststeigerGDI +関数がブロックされているため、消費プランを使用してAzure関数でAspNetCore.Reportingを実行できません。 それに対する解決策はありますか? ありがとう。

まだ完全ではありません-主にフォント情報を取得するために、GDI +とusp10.dllを何度か呼び出します。
また、GDI +ポインターを渡しますが、mono libgdi +が別の方法で処理することを選択したため(正当な理由で)、単純な置き換えはありません。

WineのCソースを読み取ることで、C#で関数GetFontDataを書き直すことができましたが、TrueTypeフォント情報を取得するにはfreetypeが必要です(wineもFreeTypeを使用します)。
SixLabors.FontsとLayoutFarmはまだ存在していません(大幅に)。
ここに:
https://gist.github.com/ststeiger/273341aebd29009f2b272b822b69563f

また、text-measurementsをfreetypeに置き換えました

次に、すべてのGDIデバイスハンドルをカスタムクラスに置き換える必要があります。
そのクラスには、font / graphics / freetype-face / handle情報などが含まれている必要があるため、レンダラーを書き直す必要はありません。

それが終わったら、紙から世界へ、そして世界から紙へと変化するために、ワインをもう一度見る必要があります。
そして、それを行う必要があります。
紙から世界への変換と世界から紙への変換は、すでにSystem.Drawing.Graphicsにあると思います。
コードの一部は、かつて.NET Framwork1.0を使用して記述されていたようです。

また、どういうわけか、.NETフォントとFreeTypeフォントの間でマッピングする必要があります。

やあみんな@ALLと@ststeiger
に関して:

@ALL
したがって、XLS / DOC-Rendererは現在LinuxとWindowsの両方で動作しています。
現在85%がLinuxに取り組んでいます。

Office Open XML

正直なところ、新しいXMLドキュメントを使用する方が良いと思います。そうすれば、OLEの形式はまったく必要ありません。
さて、もし誰かがまだ本当に本当に古いOfficeアプリを使っていたら、バックコンパットにはあまり良くありません。 しかし、Office Open XMLは2002年から2006年頃から存在しているため、過去10年間のwordまたはExcelを使用している人は誰でも、docxおよびxlsxファイル形式を問題なく使用できます。
それについての私の考え...

誤解しないように:
もちろん、OpenXmlExcelレンダラーも同様に機能します。

必要に応じて、XLS / DOCも機能すると言っています。
XLS / DOCを公開する必要があるかどうか、またはそれを安全に削除できるかどうかについては、別の質問です。 XLSXで動作できない古いプログラムがまだいくつかある可能性があります。

たとえば、UBSはまだCOBOLプログラムを使用しています。
そして、他にもいろいろあります。
したがって、万が一の場合に備えて、XLS機能をもう少し長く使用することをお勧めします。

@RaymondHuy
AzureがGDI +機能をブロックしている場合、System.Drawing.Commonはまったく機能しますか?
または、これはフレームワーク外部のDllImport呼び出しにのみ適用されますか?

うーん、ググっただけ。
System.DrawingライブラリはAzureCloud Service(基本的にはVMのみ)で利用できますが、Azure Web App(基本的に共有ホスティング?)では利用できないようです。
これは問題になる可能性があります。
したがって、これがLinuxで実行されたら、後でSystem.DrawingをSixLabors.ImageSharpに置き換えて、Azure WebAppで実行する必要があります。

これには時間と労力がかかります。
@RaymondHuy
FreeType(SharpFontラッパー)がAzureで機能するかどうかを確認できますか?
https://github.com/Robmaister/SharpFont

注意:
x64-Windowsでは、FT_LongおよびFT_ULongのusing句をこれに置き換える必要があります

#if WINDOWS
    using FT_Long = System.Int32;
    using FT_ULong = System.UInt32;    
#else // Linux, MacOS
    using FT_Long = System.IntPtr;
    using FT_ULong = System.UIntPtr;
#endif

パッチが適用されたFreeTypedllはx64-Windowsでは機能しないためです。

これが私がそれをした方法です:
https://gist.github.com/ststeiger/9e2eb98e29a3c987aca739045af1d2ce

(注:ビルドオプションでWINDOWSを定義してください)

いくつかのテストコード付き:

SharpFont.Native.Init();

SharpFont.Library lib = new SharpFont.Library();

string font = @"C:\Windows\Fonts\tahoma.ttf";
if(System.Environment.OSVersion.Platform == System.PlatformID.Unix)
    font = "/usr/share/wine/fonts/tahoma.ttf";

SharpFont.Face fontFace = new SharpFont.Face(lib, font);


float size = 12;
if (fontFace!= null)
    // fontFace.SetCharSize(0, size, 0, 96);
    fontFace.SetCharSize(size, size, 96, 96);

System.Console.WriteLine(fontFace.Size.Metrics.Ascender.ToDouble());

fontFace.Size.Metrics.Ascenderは、WINDOWS補正が適用されていない場合、例外を生成します。

.rdlcファイルを試してみると、例外が発生します
AspNetCore.ReportingServices.RdlExpressions.ExpressionHostObjectModel.DataRegionExprHost(Of TMemberType、TCellType).m_memberTreeHostsRemotable 'は、「フレンド」であるため、このコンテキストではアクセスできません。 localreport.Execute()で
私を助けてください

        string sql = "SELECT * FROM employee";
        // sql = "SELECT * FROM T_Users";

        System.Data.DataTable dt = new System.Data.DataTable();

        using (System.Data.Common.DbDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(sql, csb.ConnectionString))
        {
            da.Fill(dt);
        }

        string fn = "wwwroot/Report1.rdl";
        fn = "wwwroot/InOutTab31.rdlc";

        AspNetCore.Reporting.LocalReport lr = new AspNetCore.Reporting.LocalReport(fn);


        System.Collections.Generic.Dictionary<string, string> parameters =
            new System.Collections.Generic.Dictionary<string, string>();
        parameters["TEN_ID"]="45";
        parameters["START_DATE"]="2018";
        parameters["END_DATE"]= "2018";

        // parameters.Add("in_logo", "base64");

        lr.AddDataSource("DsDayStatusTab31", dt); // DataSet1 is the name of the DataSet in the report




        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Html, 1, null, "");

        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Rpl, 1, null, ""); // Kaboom 
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Html, 2, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Pdf, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Excel, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.ExcelOpenXml, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Word, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.WordOpenXml, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Atom, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Xml, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Json, 1, null, "");// KABOOM 
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Csv, 1, null, "");

        var rr = lr.Execute(AspNetCore.Reporting.RenderType.Excel, 1, parameters, "");

        System.Console.WriteLine(rr.TotalPages);


        string dir = @"d:\";
        if (System.Environment.OSVersion.Platform == System.PlatformID.Unix)
            dir = "/opt/";

        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.htm"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.css"), rr.SecondaryStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.pdf"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.xls"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.xlsx"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.doc"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.docx"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.tiff"), rr.MainStream);

        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.atom.xml"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.xml"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.json"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.csv"), rr.MainStream);

        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.rpl"), rr.MainStream); // BOOM 
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.htm"), rr.MainStream);
        System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.pptx"), rr.MainStream);

        BuildWebHost(args).Run();

埋め込まれたVB式に問題があるようです。
とにかく複数の問題があります。

Microsoft.VisualBasic1 \ VBCodeGenerator.cs内
UseShellExecuteをfalseに設定する必要があります。

System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(cmd)
{
    WorkingDirectory = currentDir,
    RedirectStandardOutput = true,
    RedirectStandardInput = true,
    UseShellExecute = false  // <== or else it can't redirect output
};

また、Netstandard用にコンパイルする場合はFromFileBatchをroslynに置き換える必要があります(CodeDomプロバイダーはnetstandard用にコンパイルできません-パラメーターなどでVB式が使用されている場合は面白い例外です)


        protected override System.CodeDom.Compiler.CompilerResults FromFileBatch(System.CodeDom.Compiler.CompilerParameters options, string[] fileNames)
        {

#if NETSTANDARD2_0
            return NetStandardFromFileBatch(options, fileNames);
#else
            return OldFromFileBatch(options, fileNames);
#endif
        }




#if NETSTANDARD2_0         



        protected System.CodeDom.Compiler.CompilerResults NetStandardFromFileBatch(System.CodeDom.Compiler.CompilerParameters options, string[] fileNames)
        {
            //// C:\Program Files\dotnet\sdk\2.0.0\Roslyn

            //string sysver = System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion();
            //System.Console.WriteLine(sysver);


            //string pf64 = System.Environment.ExpandEnvironmentVariables("%ProgramW6432%");
            //string pf32 = System.Environment.ExpandEnvironmentVariables("%ProgramFiles(x86)%");
            //string pf = pf32;

            //if (System.IntPtr.Size * 8 == 64)
            //    pf = pf64;

            //// compilerDirectory = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles);
            ////compilerDirectory = System.IO.Path.Combine(compilerDirectory, "dotnet", "sdk", "2.0.0", "Roslyn");
            //compilerDirectory = System.IO.Path.Combine(pf32, "MSBuild", "14.0", "Bin");
            //if (System.IntPtr.Size * 8 == 64)
            //    compilerDirectory = System.IO.Path.Combine(compilerDirectory, "amd64");

            string assemblyName = System.IO.Path.GetFileNameWithoutExtension(options.OutputAssembly);

            Microsoft.CodeAnalysis.SyntaxTree[] syntaxTrees = new Microsoft.CodeAnalysis.SyntaxTree[fileNames.Length];

            for (int i = 0; i < fileNames.Length; ++i)
            {
                string fileContent = System.IO.File.ReadAllText(fileNames[i], System.Text.Encoding.UTF8);

                Microsoft.CodeAnalysis.VisualBasic.VisualBasicParseOptions op = null;

                // ERR_EncodinglessSyntaxTree = 37236 - Encoding must be specified... 
                syntaxTrees[i] = Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxTree.ParseText(
                    fileContent, op, fileNames[i], System.Text.Encoding.UTF8
                );

            }

            Microsoft.CodeAnalysis.MetadataReference[] references =
                new Microsoft.CodeAnalysis.MetadataReference[options.ReferencedAssemblies.Count];

            for (int i = 0; i < references.Length; ++i)
            {
                references[i] = Microsoft.CodeAnalysis.MetadataReference.CreateFromFile(
                    options.ReferencedAssemblies[i]
                );
            }



            Microsoft.CodeAnalysis.VisualBasic.VisualBasicCompilationOptions co =
                new Microsoft.CodeAnalysis.VisualBasic.VisualBasicCompilationOptions
            (
                Microsoft.CodeAnalysis.OutputKind.DynamicallyLinkedLibrary
            );

            co.WithOptionStrict(Microsoft.CodeAnalysis.VisualBasic.OptionStrict.Off);
            co.WithOptionExplicit(false);
            co.WithOptionInfer(true);

            Microsoft.CodeAnalysis.Compilation compilation = Microsoft.CodeAnalysis.VisualBasic.VisualBasicCompilation.Create(
                assemblyName,
                syntaxTrees,
                references,
                co
            );


            System.CodeDom.Compiler.CompilerResults compilerResults = new System.CodeDom.Compiler.CompilerResults(options.TempFiles);

            compilerResults.NativeCompilerReturnValue = -1;

            // using (var dllStream = new System.IO.MemoryStream())
            using (System.IO.FileStream dllStream = System.IO.File.Create(options.OutputAssembly))
            {
                using (System.IO.MemoryStream pdbStream = new System.IO.MemoryStream())
                {
                    Microsoft.CodeAnalysis.Emit.EmitResult emitResult = compilation.Emit(dllStream, pdbStream);
                    if (!emitResult.Success)
                    {

                        foreach (Microsoft.CodeAnalysis.Diagnostic diagnostic in emitResult.Diagnostics)
                        {
                            // options.TreatWarningsAsErrors
                            if (diagnostic.IsWarningAsError || diagnostic.Severity == Microsoft.CodeAnalysis.DiagnosticSeverity.Error)
                            {
                                string errorNumber = diagnostic.Id;
                                string errorMessage = diagnostic.GetMessage();

                                string message = $"{errorNumber}: {errorMessage};";
                                string fileName = diagnostic.Location.SourceTree.FilePath;

                                Microsoft.CodeAnalysis.FileLinePositionSpan lineSpan = diagnostic.Location.GetLineSpan();
                                string codeInQuestion = lineSpan.Path;
                                int line = lineSpan.StartLinePosition.Line;
                                int col = lineSpan.StartLinePosition.Character;

                                compilerResults.Errors.Add(
                                    new System.CodeDom.Compiler.CompilerError(fileName, line, col, errorNumber, errorMessage)
                                );
                            } // End if 

                        } // Next diagnostic 

                        // emitResult.Diagnostics
                        // CheckCompilationResult(emitResult);
                    }
                    else
                    {
                        compilerResults.PathToAssembly = options.OutputAssembly;
                        compilerResults.NativeCompilerReturnValue = 0;
                    }
                }
            }

            // compilerResults.CompiledAssembly = System.Reflection.Assembly.Load(array3, null);

            return compilerResults;
        }
#endif

https://github.com/aspnet/RoslynCodeDomProviderにはRoslynCodeDomProvidersがあり\\ vbc.exe "はとにかく悪い考えです。

これで、完全なHTML4、HTML5、およびMHTMLレンダラーが機能するようになりました。
ページ付けされたものだけではありません。

こんにちは私は[https://www.nuget.org/packages/AspNetCore.Reporting]を使用しており、ローカルIISで完全に機能します。
しかし、Windows Server 2012 R2に展開すると、問題が発生します。

エラーログ。

失敗:Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware [1]
リクエストの実行中に未処理の例外が発生しました。
AspNetCore.Reporting.LocalProcessingException:ローカルレポートの処理中にエラーが発生しました。;レポート 'D:\ Apps \ BillingApproval \ ReportFiles \ ReleaseProcess.rdl'の定義が無効です。
式のコンパイル中に予期しないエラーが発生しました。 ネイティブコンパイラの戻り値: -1073741819'. ---> AspNetCore.Reporting.DefinitionInvalidException: The definition of the report 'D:\Apps\BillingApproval\ReportFiles\ReleaseProcess.rdl' is invalid. An unexpected error occurred while compiling expressions. Native compiler return value: -1073741819 '。 ---> AspNetCore.ReportingServices.ReportProcessing.ReportPublishingException:式のコンパイル中に予期しないエラーが発生しました。 ネイティブコンパイラの戻り値: -1073741819'. at AspNetCore.ReportingServices.ReportPublishing.ReportPublishing.InternalCreateIntermediateFormat(Stream definitionStream, String& description, String& language, ParameterInfoCollection& parameters, DataSourceInfoCollection& dataSources, DataSetInfoCollection& sharedDataSetReferences, UserLocationFlags& userReferenceLocation, ArrayList& dataSetsName, Boolean& hasExternalImages, Boolean& hasHyperlinks, Byte[]& dataSetsHash) at AspNetCore.ReportingServices.ReportPublishing.ReportPublishing.CreateIntermediateFormat(Byte[] definition, String& description, String& language, ParameterInfoCollection& parameters, DataSourceInfoCollection& dataSources, DataSetInfoCollection& sharedDataSetReferences, UserLocationFlags& userReferenceLocation, ArrayList& dataSetsName, Boolean& hasExternalImages, Boolean& hasHyperlinks, Byte[]& dataSetsHash) at AspNetCore.ReportingServices.ReportProcessing.ReportProcessing.CompileOdpReport(PublishingContext reportPublishingContext, PublishingErrorContext errorContext, String& reportDescription, String& reportLanguage, ParameterInfoCollection& parameters, DataSourceInfoCollection& dataSources, DataSetInfoCollection& sharedDataSetReferences, UserLocationFlags& userReferenceLocation, ArrayList& dataSetsName, Boolean& hasExternalImages, Boolean& hasHyperlinks, Byte[]& dataSetsHash) at AspNetCore.ReportingServices.ReportProcessing.ReportProcessing.CreateIntermediateFormat(PublishingContext reportPublishingContext) at AspNetCore.Reporting.ReportCompiler.CompileReport(ICatalogItemContext context, Byte[] reportDefinition, Boolean generateExpressionHostWithRefusedPermissions, ControlSnapshot& snapshot) --- End of inner exception stack trace --- at AspNetCore.Reporting.ReportCompiler.CompileReport(ICatalogItemContext context, Byte[] reportDefinition, Boolean generateExpressionHostWithRefusedPermissions, ControlSnapshot& snapshot) at AspNetCore.Reporting.LocalService.GetCompiledReport(PreviewItemContext itemContext, Boolean rebuild, ControlSnapshot& snapshot) at AspNetCore.Reporting.LocalService.CompileReport() at AspNetCore.Reporting.LocalService.AspNetCore.Reporting.ILocalProcessingHost.CompileReport() at AspNetCore.Reporting.InternalLocalReport.EnsureExecutionSession() --- End of inner exception stack trace --- at AspNetCore.Reporting.InternalLocalReport.EnsureExecutionSession() at AspNetCore.Reporting.InternalLocalReport.SetParameters(IEnumerable 1パラメータ)
AspNetCore.Reporting.Report.SetParameters(ReportParameterパラメーター)で
D:\ Projects \ Approval \ Main \ BA.UI.WebV2 \ Extension \ AspNetCoreReportingExtension.csのAspNetCore.Reporting.LocalReport.Execute(RenderType renderType、Int32 pageIndex、Dictionary 2 parameters, String findString) at BA.UI.WebV2.Extension.AspNetCoreReportingExtension.ExecuteToMemoryStreamResult(LocalReport localreport, RenderType rendertype, Int32 index, Dictionary 2 parameters、String searchString)で: 27行目
D:\ Projects \ Approval \ Main \ BA.UI.WebV2 \ Controllers \ ReportsController.cs:line 65のBA.UI.WebV2.Controllers.ReportsController.ReleaseProcessToPDF(DateTime from、DateTime to)
lambda_method(Closure、Object、Object [])で
Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapperマッパー、ObjectMethodExecutorエグゼキューター、オブジェクトコントローラー、Object []引数)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()で
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()で
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)で
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State&next、Scope&scope、Object&state、Boolean&isCompleted)で
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()で
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()で
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)で
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State&next、Scope&scope、Object&state、Boolean&isCompleted)で
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()で
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()で
Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)で
Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)で
Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)で
Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(HttpContext context)で

@jfmjason :CodeDomコードコンパイラ(.NET 4.0)がExprHostCompilerの一時パスにあるいくつかのファイルをコンパイルしようとしたときに発生します。 NetStandard / NetCoreアセンブリを.NET4.0プロバイダーでコンパイルしたいと考えています。 それはうまくいきません。 これらのファイルをコンパイルしようとすると、csc.exeはサイレントに失敗し、戻り値は-1073741819になります。
.NET4.0コンパイラで.NETCoreコードをコンパイルすることはできないため、System.CodeDomにないRoslynCompilersを使用する必要があります。 上記のNetStandardFromFileBatchは、まさにその問題を修正します(NetFramework 4用にコンパイルする場合はCodeDomを使用します)。

ただし、.NETCoreのVBランタイムは大幅に制限されていることに注意してください。
基本的に、.NETCoreは実際にはVB.NETをサポートしていません。

Microsoft.VisualBasic.StringsのReplace、Trim、AscW、ChrW、LCase、Len、Midなどの50程度のVB文字列関数などの基本的なVBのものを見ると、.NET Core2.0はそのうちの2つをサポートしています。 AscWおよびChrW..。

githubで現在のソースを見ると、今すぐそこにあることがわかりますが、すべてnullをスローするスタブです。
https://github.com/dotnet/corefx/blob/master/src/Microsoft.VisualBasic/ref/Microsoft.VisualBasic.cs

そのため、それに加えて、.NET CoreとNetFrameworkの両方をサポートするために、レポートのVBコードを少し編集する必要がある場合があります。

だから@ALL :ここにアイデアがあります:
コードを変更せずに.NETCoreで実行するレポートが必要な場合は、Microsoft.VisualBasic.csで文字列関数の実装を開始します。
または、VBランタイム固有のものを削除し、C#で提供されるクラスとメンバー関数を使用してみてください。たとえば、Lenの代わりにstring.Length、InStrの代わりにIndexOf、Midの代わりにSubtring、LCaseの代わりに "BLA" .ToLower()などです。 (「BLA」)など。

また、.NET Coreだけでなく、一般的なVBコードにはnull許容構文の問題がありますか?
したがって、たとえば関数の戻り値を宣言する必要がある場合は、Double?の代わりにSystem.Nullable(Of Double)を使用します。

NuGets:
Microsoft.CodeAnalysis.Common、Microsoft.CodeAnalysis.CSharp、Microsoft.CodeAnalysis.VisualBasic

また、ExprHostCompiler.csのアセンブリ参照を変更する必要があります。
(AspNetCore.ReportingServices.RdlExpressions \ ExprHostCompiler.cs)

   private static System.Reflection.Assembly GetNetStdAssembly()
        {
            System.Reflection.Assembly nsAssembly = null;

            System.Reflection.AssemblyName[] asms = typeof(Microsoft.VisualBasic.Constants).Assembly.GetReferencedAssemblies();


            foreach (System.Reflection.AssemblyName asm in asms)
            {
                if (asm.FullName.StartsWith("netstandard,", System.StringComparison.OrdinalIgnoreCase))
                {
                    nsAssembly = System.Reflection.Assembly.Load(asm.FullName);
                    break;
                }
            }

            return nsAssembly;


            //System.Reflection.Assembly[] asms = System.AppDomain.CurrentDomain.GetAssemblies();
            //
            //foreach (System.Reflection.Assembly asm in asms)
            //{
            //    if (asm.FullName.StartsWith("netstandard,", System.StringComparison.OrdinalIgnoreCase))
            //    {
            //        nsAssembly = asm;
            //        break;
            //    }
            //}

            // return nsAssembly;
        }



        private byte[] InternalCompile(System.AppDomain compilationTempAppDomain, bool refusePermissions)
        {
            if (m_builder.HasExpressions)
            {
                System.CodeDom.Compiler.CompilerParameters compilerParameters = new System.CodeDom.Compiler.CompilerParameters();
                compilerParameters.OutputAssembly = System.IO.Path.Combine(System.IO.Path.GetTempPath(), m_expressionHostAssemblyHolder.ExprHostAssemblyName, "ExpressionHost.dll");
                compilerParameters.TempFiles = new System.CodeDom.Compiler.TempFileCollection(System.IO.Path.GetDirectoryName(compilerParameters.OutputAssembly));
                compilerParameters.GenerateExecutable = false;
                compilerParameters.GenerateInMemory = false;
                compilerParameters.IncludeDebugInformation = false;

                compilerParameters.ReferencedAssemblies.Add(typeof(AspNetCore.Reporting.InternalLocalReport).Assembly.Location);

                // Real reportServer
                // compilerParameters.ReferencedAssemblies.Add("System.dll");
                // compilerParameters.ReferencedAssemblies.Add(typeof(AspNetCore.ReportingServices.RdlExpressions.ExpressionHostObjectModel.ReportObjectModelProxy).Assembly.Location);
                // compilerParameters.ReferencedAssemblies.Add(typeof(Microsoft.SqlServer.Types.SqlGeography).Assembly.Location);

#if NETSTANDARD2_0

                // Assemblies: mscorlib.dll, netstandard.dll, System.Threading.Thread.dll
                // System.Threading.Thread.dll, not netstandard.dll ...
                //// compilerParameters.ReferencedAssemblies.Add(typeof(System.LocalDataStoreSlot).Assembly.Location);

                // compilerParameters.ReferencedAssemblies.Add(System.Linq.Enumerable.FirstOrDefault(System.Linq.Enumerable.Where(System.AppDomain.CurrentDomain.GetAssemblies(), (System.Reflection.Assembly t) => t.FullName.Contains("netstandard,"))).Location);

                // netstandard.dll
                compilerParameters.ReferencedAssemblies.Add(GetNetStdAssembly().Location);

                // System.Private.CoreLib.dll
                compilerParameters.ReferencedAssemblies.Add(typeof(System.MarshalByRefObject).Assembly.Location);

                // System.Runtime.dll
                compilerParameters.ReferencedAssemblies.Add(typeof(System.IO.FileAttributes).Assembly.Location);

                // Microsoft.VisualBasic.dll
                compilerParameters.ReferencedAssemblies.Add(typeof(Microsoft.VisualBasic.Constants).Assembly.Location);

                //compilerParameters.ReferencedAssemblies.Add(typeof(string).Assembly.Location);
                //compilerParameters.ReferencedAssemblies.Add(typeof(System.Uri).Assembly.Location);

                //compilerParameters.ReferencedAssemblies.Add(typeof(System.Drawing.RectangleF).Assembly.Location);
                //compilerParameters.ReferencedAssemblies.Add(typeof(System.Drawing.Graphics).Assembly.Location);

                //compilerParameters.ReferencedAssemblies.Add(typeof(System.Data.Common.DbCommand).Assembly.Location);
                //compilerParameters.ReferencedAssemblies.Add(typeof(System.Data.SqlClient.SqlCommand).Assembly.Location);

                //// compilerParameters.ReferencedAssemblies.Add(typeof(System.LocalDataStoreSlot).Assembly.Location);
#else

                // mscorlib
                compilerParameters.ReferencedAssemblies.Add(typeof(string).Assembly.Location); 

                // System.Core
                // Already contains reference to System.Core
                // compilerParameters.ReferencedAssemblies.Add(typeof(System.IO.Pipes.PipeSecurity).Assembly.Location);

                // Microsoft.CSharp
                // compilerParameters.ReferencedAssemblies.Add(typeof(Microsoft.CSharp.RuntimeBinder.RuntimeBinderException).Assembly.Location); 

                // Microsoft.VisualBasic.Constants
                compilerParameters.ReferencedAssemblies.Add(typeof(Microsoft.VisualBasic.Constants).Assembly.Location); 

                // System
                // Already contains reference to System
                // compilerParameters.ReferencedAssemblies.Add(typeof(System.Uri).Assembly.Location); 
                // Already contains reference to System.Drawing
                // compilerParameters.ReferencedAssemblies.Add(typeof(System.Drawing.Graphics).Assembly.Location);
                // Already contains reference to System.Data 
                // compilerParameters.ReferencedAssemblies.Add(typeof(System.Data.DataTable).Assembly.Location);
#endif

                compilerParameters.CompilerOptions += m_langParser.GetCompilerArguments();

@ amh1979 :まだ見ていませんが、ページバージョンのビューアでは、レポートの画像はページHTMLレンダリングに表示されますか?
ReportServerからhtml4&5の完全なレンダラーを取得したとき、画像はReportingServicesのaxdまたはashxハンドラーに委任されているように見えるためです。 ただし、MHTバージョンで登場しました。

おそらくurl( "data:image / png; base64、SOME_BASE64_IMAGE");に変更する必要があります。 代わりに、HTMLでインラインになるようにします。
つまり、外部リンク以外に接続する場合です。
それがビューアにも影響するかどうかはテストしませんでした。

@ststeiger

ご回答ありがとうございます。 Webアプリケーションのリリースバージョン(.netコア2.1)をローカルIISで公開すると、なぜ完全に機能するのでしょうか。

.NET Frameworkがローカルにインストールされているため、ローカルで機能している可能性があります。
または、ローカルWebサーバーが統合モードになっていないか、別のユーザーの下で実行されているか、別のロジックパス、アプリケーションプール設定、セキュリティ設定、アセンブリリダイレクトなどにヒットしているためです。
また、ServicePack、CumulativeUpdates、その他のエキサイティングな「機能」。

小さなテストアプリケーションを作成しました。
Win10でSystem.Drawing.Commonを追加すると、正常に動作します。
Ubuntu 16.04で実行すると、エラーが発生します。
AspNetCore.Reporting.LocalProcessingException:ローカルレポートの処理中にエラーが発生しました。;レポート '/opt/testReportViewer/bin/Debug/netcoreapp2.1/Reports/Report1.rdlc'の定義が無効です。
レポート処理で予期しないエラーが発生しました。
共有ライブラリ 'kernel32.dll'またはその依存関係の1つを読み込めません。 読み込みの問題の診断に役立てるために、LD_DEBUG環境変数の設定を検討してください:libkernel32.dll:共有オブジェクトファイルを開くことができません:そのようなファイルまたはディレクトリはありません---> AspNetCore.Reporting.DefinitionInvalidException:レポートの定義 '/ opt / testReportViewer /bin/Debug/netcoreapp2.1/Reports/Report1.rdlc 'が無効です。
レポート処理で予期しないエラーが発生しました。
共有ライブラリ 'kernel32.dll'またはその依存関係の1つを読み込めません。 読み込みの問題の診断に役立てるために、LD_DEBUG環境変数の設定を検討してください。libkernel32.dll:共有オブジェクトファイルを開くことができません:そのようなファイルまたはディレクトリはありません---> AspNetCore.ReportingServices.ReportProcessing.ReportProcessingException:レポート処理で予期しないエラーが発生しました。
共有ライブラリ 'kernel32.dll'またはその依存関係の1つを読み込めません。 読み込みの問題の診断に役立てるために、LD_DEBUG環境変数の設定を検討してください:libkernel32.dll:共有オブジェクトファイルを開くことができません:そのようなファイルまたはディレクトリはありません---> System.DllNotFoundException:共有ライブラリ 'kernel32.dll'または1つを読み込めませんその依存関係の。 読み込みの問題の診断に役立てるために、LD_DEBUG環境変数の設定を検討してください。libkernel32.dll:共有オブジェクトファイルを開くことができません:そのようなファイルまたはディレクトリはありません
AspNetCore.ReportingServices.ReportPublishing.ReportPublishing.InternalCreateIntermediateFormat(StreamdefinitionStream、String&description、String&language、ParameterInfoCollection&parameters、DataSourceInfoCollection&dataSources、DataSetInfoCollection&sharedDataSetReferences、UserLocationFlags&userReferenceLocation、ArrayList&dataSetsName、Boolean&hasExternalImages、Boolean&hasHyper
AspNetCore.ReportingServices.ReportPublishing.ReportPublishing.CreateIntermediateFormat(Byte []定義、文字列と説明、文字列と言語、ParameterInfoCollectionとパラメータ、DataSourceInfoCollectionとdataSources、DataSetInfoCollectionとsharedDataSetReferences、UserLocationFlagsとuserReferenceLocation、ArrayListとdataSetsName、BooleanとhasExternalImages、BooleanとhasHyper
AspNetCore.ReportingServices.ReportProcessing.ReportProcessing.CompileOdpReport(PublishingContext reportPublishingContext、PublishingErrorContext errorContext、String&reportDescription、String&reportLanguage、ParameterInfoCollection&parameters、DataSourceInfoCollection&dataSources、DataSetInfoCollection&sharedDataSetReferences、UserLocationFlags&userReferenceLocation、ArrayList&dataSetsName
AspNetCore.ReportingServices.ReportProcessing.ReportProcessing.CreateIntermediateFormat(PublishingContext reportPublishingContext)で
---内部例外スタックトレースの終了---
AspNetCore.ReportingServices.ReportProcessing.ReportProcessing.CreateIntermediateFormat(PublishingContext reportPublishingContext)で
AspNetCore.Reporting.ReportCompiler.CompileReport(ICatalogItemContext context、Byte [] reportDefinition、Boolean generateExpressionHostWithRefusedPermissions、ControlSnapshot&snapshot)で
---内部例外スタックトレースの終了---
AspNetCore.Reporting.ReportCompiler.CompileReport(ICatalogItemContext context、Byte [] reportDefinition、Boolean generateExpressionHostWithRefusedPermissions、ControlSnapshot&snapshot)で
AspNetCore.Reporting.LocalService.GetCompiledReport(PreviewItemContext itemContext、ブール再構築、ControlSnapshot&スナップショット)
AspNetCore.Reporting.LocalService.CompileReport()で
AspNetCore.Reporting.LocalService.AspNetCore.Reporting.ILocalProcessingHost.CompileReport()で
AspNetCore.Reporting.InternalLocalReport.EnsureExecutionSession()で
---内部例外スタックトレースの終了---

@ststeiger AspNetCore.Reportingライブラリに関するニュースはありますか? 私は数日から.NETCoreでRDLファイルからPDFを作成するためのソリューションを探していましたが、見つけた唯一のソリューションはAspNetCore.Reportingでした。これは後でWindowsでのみ機能することを発見し、ここで行って報告した変更は非常に魅力的です。 、また、サブレポートの使用にかなりの問題があり、ソースがないとAspNetCore.Reportingをデバッグできないためです:) ...不足しているビットを改善するためにそのライブラリを支援することに非常に興味があります(そして最終的にそれをデバッグできるようになります...)

@OkunevPY :これは、データソースデータを安全に保存するために使用されるメモリ管理機能の1つが原因である可能性があります。 Linuxでは、これをオフに切り替えました。データを暗号化せずに保存します。 それは安全ではありませんが、それからそれは働きます。 ただし、ReportViewerコードでこれを行う必要があります。 実稼働グレードのコードでは、暗号化/復号化の方法を実装する必要がありますが、これは難しくありませんが、最初にすべての機能を動作させたいだけです。

@zillemarco;
PDF作成はまだ機能しません(Windowsでのみ機能します)。
また、そのリバースエンジニアリングされたdllを使用してデプロイするアプリケーションを作成する場合、技術的には違法なことを行っています。

Linuxで生成されたPDFが必要な場合は、wkHtmlToPdfを使用してHTMLから生成することをお勧めします。
.NET-Coreの亜種は次のとおりです。
https://github.com/ststeiger/libWkHtml2X
実行可能バリアント(input / output-stream経由のwkhtmltopdf.exe、wkhtmltoimage.exe)のみを使用してください
libWkHtmlToX.ProcessManager(opts)
wkhtmltox.dllはマルチスレッドのシナリオでは機能しないため、さらに私のC#インターフェイスはまだ完全にバグがないわけではありません。

いくつかの使用例(C#に変換するためのconverter.telerik.com):

  • SVGからPDFへ:
Dim pngBytes As Byte() = Nothing
Dim paper_maxWidth As Double = 1024 ' pixel
Dim paper_maxHeight As Double = 768 ' pixel
Dim svgInfo As cSvgInfo = Portal_Convert.wkHtmlHelper.SvgToPaperSize(svg, paper_maxWidth, paper_maxHeight, False)

Dim opts As New libWkHtmlToX.WkHtmlToImageCommandLineOptions()
opts.ExecutableDirectory = Portal_Convert.wkHtmlHelper.GetWkHtmlToXPath()

opts.DisableSmartWidth = True
opts.ScreenWidth = System.Math.Ceiling(svgInfo.NewWidth)
opts.ScreenHeight = System.Math.Ceiling(svgInfo.NewHeight)

' svgInfo.HTML = System.IO.File.ReadAllText(System.Web.Hosting.HostingEnvironment.MapPath("~/External/1506414857353.svg"), System.Text.Encoding.UTF8)

Using p As New libWkHtmlToX.ProcessManager(opts)
    p.Start()
    p.WriteStandardInput(svgInfo.HTML)
    pngBytes = p.ReadOutputStream()

    Dim b As Boolean = p.WaitForExit(5000)
End Using ' p 
  • HTMLからPDFへ:
        Dim opts As New libWkHtmlToX.WkHtmlToPdfCommandLineOptions()
        opts.ExecutableDirectory = Portal_Convert.wkHtmlHelper.GetWkHtmlToXPath()

        ' Dim measure As String = value.Replace(Number.ToString(), "")

        'Dim dblWidth As Double = Double.Parse(System.Text.RegularExpressions.Regex.Match(width, "[\d.]+").Value)
        'Dim dblHeight As Double = Double.Parse(System.Text.RegularExpressions.Regex.Match(height, "[\d.]+").Value)

        'If dblHeight > dblWidth Then
        '    opts.Orientation = libWkHtmlToX.Orientation_t.Portrait
        'Else
        '    opts.Orientation = libWkHtmlToX.Orientation_t.Landscape
        '    Dim x As String = width
        '    width = height
        '    height = x
        'End If

        opts.Width = width
        opts.Height = height
        opts.DisableSmartShrinking = True

        ' dpi is not working in wkhtmltopdf version 0.12.4
        ' opts.DPI = 300
        ' zoom setting with value 96/300 = 0.32
        ' opts.ZoomFactor = 96.0 / opts.DPI
        ' opts.ZoomFactor = 1.0 - 96.0 / opts.DPI
        ' opts.ZoomFactor = (1.0 / opts.DPI) / (1.0 / 96.0)
        opts.DPI = 96

        Dim pdfBytes As Byte() = Nothing

        Using p As New libWkHtmlToX.ProcessManager(opts)
            p.Start()
            p.WriteStandardInput(html)
            pdfBytes = p.ReadOutputStream()

            Dim b As Boolean = p.WaitForExit(5000)
        End Using ' p 

        Return pdfBytes

または、PdfSharp for.NET-Coreを使用することもできます
https://github.com/ststeiger/PdfSharpCore

また、完全なPDFライブラリをNetStandardに移植しました。これは次の場所にあります。
https://github.com/ststeiger/PdfSharpNetStandard
(Azureホスティングが必要ない場合は、PdfSharpNetStandardを選択することをお勧めします)

Linux上のReportViewer-PDFに関する限り:
最初に多くのピンボークを実装

GetFontDataはこれが最も重要であるため(フォントの埋め込み)、まだ実行していません。
gitlab(ハブではない)アカウント名を教えていただければ、リポジトリへの読み取りアクセスを許可できます。

@ststeigerそのライブラリを使用してアプリをデプロイすることは違法であり、それを行うつもりはないことはわかっていますが、ソースコードを使用すると、少なくともデバッグでき、サブレポートを読み込めない理由を理解できます。データをそれに渡します(私はresharperで試しましたが、それは悪夢です)。 リポジトリへの読み取りアクセスを許可したい場合は、私はそれが大好きです:)私のgitlabユーザー名はzillemarcoです(ここgithubのように)

@zillemarco :あなたを追加しました。
おそらくリポジトリへのリンクが記載されたメールをgitlabから受け取っているはずです。

Resharperの代わりにILSpy4.0 Beta2を試してください。
https://github.com/icsharpcode/ILSpy/releases

.NET Framework内でデバッグする必要がある場合は、Riderでlive-decompile&debugを試してください。EAPは無料です。
https://www.jetbrains.com/rider/eap/

@ststeigerはメールに感謝しました:)ヒントもありがとう!

@ststeiger okunevpyのリポジトリAspNetCore.Reportingへのアクセスを許可できますか?

@OkunevPY :あなたは追加されました。 メールを参照してください。

@ststeigerありがとう。

        string sql = "SELECT * FROM employee";
        // sql = "SELECT * FROM T_Users";

        System.Data.DataTable dt = new System.Data.DataTable();

        using (System.Data.Common.DbDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(sql, csb.ConnectionString))
        {
            da.Fill(dt);
        }

        string fn = "wwwroot/Report1.rdl";
        fn = "wwwroot/InOutTab31.rdlc";

        AspNetCore.Reporting.LocalReport lr = new AspNetCore.Reporting.LocalReport(fn);


        System.Collections.Generic.Dictionary<string, string> parameters =
            new System.Collections.Generic.Dictionary<string, string>();
        parameters["TEN_ID"]="45";
        parameters["START_DATE"]="2018";
        parameters["END_DATE"]= "2018";

        // parameters.Add("in_logo", "base64");

        lr.AddDataSource("DsDayStatusTab31", dt); // DataSet1 is the name of the DataSet in the report




        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Html, 1, null, "");

        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Rpl, 1, null, ""); // Kaboom 
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Html, 2, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Pdf, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Excel, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.ExcelOpenXml, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Word, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.WordOpenXml, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Atom, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Xml, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Json, 1, null, "");// KABOOM 
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Csv, 1, null, "");

        var rr = lr.Execute(AspNetCore.Reporting.RenderType.Excel, 1, parameters, "");

        System.Console.WriteLine(rr.TotalPages);


        string dir = @"d:\";
        if (System.Environment.OSVersion.Platform == System.PlatformID.Unix)
            dir = "/opt/";

        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.htm"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.css"), rr.SecondaryStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.pdf"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.xls"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.xlsx"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.doc"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.docx"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.tiff"), rr.MainStream);

        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.atom.xml"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.xml"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.json"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.csv"), rr.MainStream);

        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.rpl"), rr.MainStream); // BOOM 
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.htm"), rr.MainStream);
        System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.pptx"), rr.MainStream);

        BuildWebHost(args).Run();

AspNetCore.Reporting.LocalProcessingException: 'ローカルレポートの処理中にエラーが発生しました。;エンコード1252に使用できるデータがありません。カスタムエンコーディングの定義については、Encoding.RegisterProviderメソッドのドキュメントを参照してください。

@Jhonnybmx :google.comというウェブサイトがあります。ここにエラーメッセージを入力します。解決策は最初のリンクです...

https://stackoverflow.com/questions/49215791/vs-code-c-sharp-system-notsupportedexception-no-data-is-available-for-encodin

System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

こんにちは。rdlcレポートをPDFにエクスポートするための.NETCoreのLocalReportに興味があります。
私にとっては、今のところWindowsのみのバージョンで問題ありません。

@ amh1979によるNuGetパッケージAspNetCore.ReportingServicesに出くわしました。これはまさに私が必要としているものです。
問題は、このパッケージのInternalLocalReportクラスが内部であり、式のAPI全体(元のMS LocalReport実装のように)にアクセスする必要があることです。 SubreportProcessingイベントを使用するには、LoadSubreportDefinition()またはGetParameters()メソッドを呼び出します。

これらのメソッドは(AspNetCore.Reporting NuGet内の)AspNetCore.Reporting.LocalReportクラスに実装されていないため、直接呼び出す必要があります。

アセンブリAspNetCore.ReportingServices.dllは、AspNetCore.Reporting.dllアセンブリのInternalsVisibleToを設定しました。
https://github.com/amh1979/Reporting/tree/master/AspNetCore.Reporting with Reporting.pfx証明書(パスワードを持っていません)のように、どういうわけかそれを使用できますか?

助けてくれますか? これに対する解決策は何ですか?

@ststeigerGitLabリポジトリAspNetCore.Reportingへのアクセスを
ありがとう

このライセンスに基づくAspNetCore.ReportingServices
http://go.microsoft.com/fwlink/?LinkId=826162
私はそれを閉じました

誰かがこのパッケージの使用/実装方法に関するドキュメント/手がかりまたはヒントを提供できますか? どうもありがとうございました。

@ ststeigerAspNetCore.Reportingリポジトリへのアクセスを教えてください。 LinuxでPDFを使用して動作させるようにしています。

@ holajan@ skivsoft
申し訳ありませんが、休日でした-シンガポールとタイへの素敵な旅行でした。
アクセスが許可されました。gitlabに提供されたアドレスにメールが届いているはずです。

@azharuddinsayed

.rdlcファイルを試してみると、例外が発生します
AspNetCore.ReportingServices.RdlExpressions.ExpressionHostObjectModel.DataRegionExprHost(Of TMemberType、TCellType).m_memberTreeHostsRemotable 'は、「フレンド」であるため、このコンテキストではアクセスできません。 localreport.Execute()で
私を助けてください

私はなんとかそのエラーを再現することができました。
次の変更が必要です。


ReportingServices/AspNetCore.ReportingServices.RdlExpressions.ExpressionHostObjectModel/CustomCodeProxyBase.cs

internal AspNetCore.ReportingServices.RdlExpressions.ExpressionHostObjectModel.IReportObjectModelProxyForCustomCode Report => m_reportObjectModel;
==>
internal protected AspNetCore.ReportingServices.RdlExpressions.ExpressionHostObjectModel.IReportObjectModelProxyForCustomCode Report => m_reportObjectModel;



internal CustomCodeProxyBase(AspNetCore.ReportingServices.RdlExpressions.ExpressionHostObjectModel.IReportObjectModelProxyForCustomCode reportObjectModel)
==> 
internal protected CustomCodeProxyBase(AspNetCore.ReportingServices.RdlExpressions.ExpressionHostObjectModel.IReportObjectModelProxyForCustomCode reportObjectModel)

そして

ReportingServices/AspNetCore.ReportingServices.RdlExpressions.ExpressionHostObjectModel/IReportObjectModelProxyForCustomCode.cs
internal interface IReportObjectModelProxyForCustomCode
==> 
public interface IReportObjectModelProxyForCustomCode

それに加えて、次の修正
AnyWebReporting \ ReportingServices \ Microsoft.VisualBasic1 \ VBCodeGenerator.cs

System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe", "/c " + cmd)
==>
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe", "/c \"" + cmd + "\"")

そうすれば、少なくとも私の場合は、カスタムコードが機能します。
マスターで更新されました。

@ststeigerアクセスしていただきありがとうございます。 LinuxでPDFをレンダリングする方法を知っていますか? 置き換えるにはピンボークが多すぎます。

@skivsoft :まだありません。
すべてのピンボークを同等のFreeTypeに置き換える必要がありますが、これは大変な作業です。

LinuxでPDFを作成する必要がある場合は、PdfSharpCoreまたはPdfSharpNetStandardを試すことができます。
https://github.com/ststeiger/PdfSharpCore
https://github.com/ststeiger/PdfSharpNetStandard
私はLinuxで両方を使用しています。
PdfSharpNetStandardはより完全ですが、GDI + / libGDIplusも使用しますが、PdfSharpCoreはSystem.Drawingを回避します。

@ststeigerリポジトリにアクセスしていただきありがとうございます。

.NET Core 2.2 Windowsアプリでレポートを機能させる(PDFにエクスポートする)ことができました。
LocalReportsを削除し、InternalLocalReportをLocalReportに変更してクラスを公開したため、ReportViewer_NetStandardプロジェクトのコピーで作成しました(元のLocalReport APIにアクセスする必要がありました)。

私のレポートでは、2つの問題を修正しました。
いくつかのVisualBasic式:
IIf -_ExprHostBuilder_のMicrosoft.VisualBasic.Interactionにインポートを追加しMicrosoft.VisualBasic.Interactionクラスが内部にあるnetcoreapp2.2に変更し、 Microsoft.VisualBasic.InteractionクラスをMicrosoft.VisualBasic1に追加し

Format -_ExprHostBuilder_のMicrosoft.VisualBasic.StringsExにインポートを追加し、 Microsoft.VisualBasic.StringsExを追加しました(元のクラスMicrosoft.VisualBasic.Stringsはパブリックですが、Format関数がないため)

System.Environment.NewLine -_ExprHostCompiler_にSystem.Runtime.Extensions.dllへの参照を追加しました。

コードの変更は次のとおりです。

In AspNetCore.ReportingServices.RdlExpressions\ExprHostBuilder.cs:
AspNetCore.ReportingServices.RdlExpressions.ExprHostBuilder.GetExprHost(AspNetCore.ReportingServices.ReportIntermediateFormat.ProcessingIntermediateFormatVersion version, bool refusePermissions)
+                codeNamespace.Imports.Add(new System.CodeDom.CodeNamespaceImport("Microsoft.VisualBasic.StringsEx"));
+                codeNamespace.Imports.Add(new System.CodeDom.CodeNamespaceImport("Microsoft.VisualBasic.Interaction"));

In AspNetCore.ReportingServices.ReportProcessing\ExprHostBuilder.cs:
AspNetCore.ReportingServices.ReportProcessing.ExprHostBuilder.GetExprHost(AspNetCore.ReportingServices.ReportProcessing.IntermediateFormatVersion version, bool refusePermissions)
+                codeNamespace.Imports.Add(new System.CodeDom.CodeNamespaceImport("Microsoft.VisualBasic.StringsEx"));
+                codeNamespace.Imports.Add(new System.CodeDom.CodeNamespaceImport("Microsoft.VisualBasic.Interaction"));

In AspNetCore.ReportingServices.RdlExpressions\ExprHostCompiler.cs:
AspNetCore.ReportingServices.RdlExpressions.ExprHostCompiler.InternalCompile(System.AppDomain compilationTempAppDomain, bool refusePermissions)
+                // System.Runtime.Extensions.dll
+                compilerParameters.ReferencedAssemblies.Add(typeof(System.Environment).Assembly.Location);

Added file Microsoft.VisualBasic1\Interaction.cs:
using Microsoft.VisualBasic.CompilerServices;

namespace Microsoft.VisualBasic
{
    /// <summary>The <see langword="Interaction" /> module contains procedures used to interact with objects, applications, and systems. </summary>
    [StandardModule]
    public sealed class Interaction
    {
        public static T IIf<T>(bool condition, T truePart, T falsePart)
        {
            return !condition ? falsePart : truePart;
        }
    }
}






Added file Microsoft.VisualBasic1\StringsEx.cs in (StringsEx.zip)
Added file Microsoft.VisualBasic1\UtilsEx.cs in (StringsEx.zip)
Added file Microsoft.VisualBasic1\Information.cs in (StringsEx.zip)
Added file Microsoft.VisualBasic1\Symbols.cs in (StringsEx.zip)
Added file Microsoft.VisualBasic1\ExceptionUtils.cs in (StringsEx.zip)

StringsEx.zip

式を使用してサブレポートを修正します。
サブレポート要素が特定のサブレポートに対してReportExprHostではなくメインレポートのReportExprHostを使用しているため、サブレポートの式が機能していないことに気付きました。 ReportRuntime.LoadExprHostAssemblyでエラーを見つけることができました。ここでは、 ExpressionHost.dllアセンブリが名前でキャッシュされていますが、すべてのレポートとサブレポートの名前は常に同じ「_ExpressionHost_」です。 このキャッシュを削除しました。
コードの変更:

In AspNetCore.ReportingServices.RdlExpressions\ReportRuntime.cs:
-                private static readonly System.Collections.Hashtable ExpressionHosts = new System.Collections.Hashtable();

AspNetCore.ReportingServices.RdlExpressions.ReportRuntime.LoadExprHostIntoCurrentAppDomain(byte[] exprHostBytes, string exprHostAssemblyName, System.Security.Policy.Evidence evidence, bool includeParameters, bool parametersOnly, AspNetCore.ReportingServices.ReportProcessing.OnDemandReportObjectModel.OnDemandObjectModel objectModel, System.Collections.Generic.List<string> codeModules)
-                System.Reflection.Assembly assembly = LoadExprHostAssembly(exprHostBytes, exprHostAssemblyName, evidence);
+                System.Reflection.Assembly assembly = LoadExprHostAssembly(exprHostBytes);

            private static System.Reflection.Assembly LoadExprHostAssembly(byte[] exprHostBytes)
            {
                try
                {
                    new System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityPermissionFlag.ControlEvidence).Assert();
                    return System.Reflection.Assembly.Load(exprHostBytes);
                }
                finally
                {
                    System.Security.CodeAccessPermission.RevertAssert();
                }
            }

これらの変更を確認し、これが理にかなっている場合は、リポジトリでも変更を加えてください。

ありがとうございました。

@holajan :名前空間にSystem.Stringを追加すると、次のようになります。
Ambigous call to Replace - cannot resolve call
Microsoft.VisualBasic.Interactionクラスを追加すると、次のようになります。
ambigous call to Microsoft.VisualBasic.Interaction
NetCoreまたは.NETFramework4で実行した場合。
たぶん、これは.NET Core2.2でのみ機能します。

キャッシュが正しくない場合は、キャッシュしない方がよいでしょう。
その変更に同意します。
ただし、古いコードを(削除するのではなく) #ifdef falseに入れました。

@ststeiger私は可能System.Stringが間違っていたため、私は今実装Microsoft.VisualBasic.StringsEx代わりのためのフォーマットおよびその他の機能を使用して、自分のコメントを編集しました。 そのために残念。

はいMicrosoft.VisualBasic.Interaction.NETCore 2.2でのみ機能します。これは、クラスMicrosoft.VisualBasic.InteractionがMicrosoft.VisualBasic.dll for .NETCoreAppv2.09にあるためです。パブリックですが、内部メソッドIIfを使用します。
これをよりよく解決する方法はわかりませんが、.NET Core 3.0では、とにかく変更される可能性があります。

@holajan :長い間、3.0まで待ちましょう
InternalLocalReportを公開しました。
その公開性に関して今奇妙な名前;)

@holajan :Microsoft.VisualBasic.StringsExを追加し、動作するようになりました
.NET 4用のIReadOnlyDictionaryを追加する必要がありましたが、それはちょっとしたコメントです。
それがうまくいくかどうかテストしていただけませんか。

@ststeiger私はそれをテストしました。
私は仕事へのIIFの発現のためのMicrosoft.VisualBasic1._Interaction.csに真の#if偽の#if変更する必要があります。
それ以外の場合は正常に動作します。
ありがとう

@holajan

このスレッドのすべての人が、これが追加されることに投票する必要があります: https

2019/03の時点で、最重要指名手配機能の上位から7番目: https ://feedback.azure.com/forums/908035-sql-server?category_id = 325159

編集:2019/05現在、上から5番目

編集:2019/07現在、上から4番目

        string sql = "SELECT * FROM employee";
        // sql = "SELECT * FROM T_Users";

        System.Data.DataTable dt = new System.Data.DataTable();

        using (System.Data.Common.DbDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(sql, csb.ConnectionString))
        {
            da.Fill(dt);
        }

        string fn = "wwwroot/Report1.rdl";
        fn = "wwwroot/InOutTab31.rdlc";

        AspNetCore.Reporting.LocalReport lr = new AspNetCore.Reporting.LocalReport(fn);


        System.Collections.Generic.Dictionary<string, string> parameters =
            new System.Collections.Generic.Dictionary<string, string>();
        parameters["TEN_ID"]="45";
        parameters["START_DATE"]="2018";
        parameters["END_DATE"]= "2018";

        // parameters.Add("in_logo", "base64");

        lr.AddDataSource("DsDayStatusTab31", dt); // DataSet1 is the name of the DataSet in the report




        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Html, 1, null, "");

        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Rpl, 1, null, ""); // Kaboom 
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Html, 2, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Pdf, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Excel, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.ExcelOpenXml, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Word, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.WordOpenXml, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Atom, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Xml, 1, null, "");
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Json, 1, null, "");// KABOOM 
        // var rr = lr.Execute(AspNetCore.Reporting.RenderType.Csv, 1, null, "");

        var rr = lr.Execute(AspNetCore.Reporting.RenderType.Excel, 1, parameters, "");

        System.Console.WriteLine(rr.TotalPages);


        string dir = @"d:\";
        if (System.Environment.OSVersion.Platform == System.PlatformID.Unix)
            dir = "/opt/";

        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.htm"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.css"), rr.SecondaryStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.pdf"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.xls"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.xlsx"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.doc"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.docx"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.tiff"), rr.MainStream);

        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.atom.xml"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.xml"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.json"), rr.MainStream);
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.csv"), rr.MainStream);

        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.rpl"), rr.MainStream); // BOOM 
        // System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.htm"), rr.MainStream);
        System.IO.File.WriteAllBytes(System.IO.Path.Combine(dir, "foo.pptx"), rr.MainStream);

        BuildWebHost(args).Run();

AspNetCore.Reporting.LocalProcessingException: 'ローカルレポートの処理中にエラーが発生しました。;エンコード1252に使用できるデータがありません。カスタムエンコーディングの定義については、Encoding.RegisterProviderメソッドのドキュメントを参照してください。

以下のコードを追加します。
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
それは私の問題を解決します

こんにちは、

以下のコードを使用してHtmlでレポートをエクスポートしようとしましたが、正しくレンダリングされません。

.rdlファイルにはチャートが含まれています

Htmlのスクリーンショットを添付しました

この問題の解決にご協力いただければ幸いです。

ありがとう

PlatForm:ASP.NET Core

public string _reportPath = @ ".. \ RenderReportAPI \ employeeChart.rdl";

string mimtype = "";
int拡張= 1;

       LocalReport localReport = new LocalReport(_reportPath);

    _dataSourceName = "DataSet1";
    _dataSourceList = Employee.GetEmployees();                                   
    localReport.AddDataSource(_dataSourceName, _dataSourceList);



    System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
    var result = localReport.Execute(RenderType.Html, extension, null, findString: mimtype);

Chart_html

@chinturathod :「レポートチャート」要素のURLは何を示していますか?
html-rendererには、CSSのセカンダリ出力ストリームがあります。
base64でエンコードされた画像が含まれていますか? それとも、画像ハンドラーへの単なるリンクですか?

@ststeiger
こんにちは以下のHTMLとCSSを見つけてください
HTML:

\"Report
19-03-2019 12:08:25







CSS:

"#rsoReportDiv .A97993c8d452f40d4910a317776d607f616xBc {
border:1pt none Black;
背景色:透明;
}

rsoReportDiv .A97993c8d452f40d4910a317776d607f616xB {

border:1pt none Black;
background-color:Transparent;

}

rsoReportDiv .A97993c8d452f40d4910a317776d607f69 {

word-wrap:break-word;
word-break:break-word;
white-space:pre-wrap;
min-width:139.70mm;
overflow:hidden;
width:139.70mm;
border:1pt none Black;
background-color:Transparent;
font-style:normal;
font-family:'Segoe UI Light';
font-size:28pt;
font-weight:400;
text-decoration:none;
unicode-bidi:normal;
color:Black;
vertical-align:top;
text-align:left;

}

rsoReportDiv .A97993c8d452f40d4910a317776d607f614 {

border:1pt none #d3d3d3;
background-color:White;

}

rsoReportDiv .A97993c8d452f40d4910a317776d607f65c {

border:1pt none Black;
background-color:Transparent;

}

rsoReportDiv .A97993c8d452f40d4910a317776d607f65 {

min-width:152.40mm;
min-height:65.14mm;
width:152.40mm;
border:1pt none Black;
background-color:Transparent;

}

rsoReportDiv .A97993c8d452f40d4910a317776d607f63 {

word-wrap:break-word;
word-break:break-word;
white-space:pre-wrap;
padding-left:2pt;
padding-top:2pt;
padding-right:2pt;
padding-bottom:2pt;
border:1pt none Black;
background-color:Transparent;
font-style:normal;
font-family:'Segoe UI';
font-size:10pt;
font-weight:400;
text-decoration:none;
unicode-bidi:normal;
color:Black;
vertical-align:top;
text-align:right;

}

rsoReportDiv .rsr1 {

height:100%;
width:100%

}

rsoReportDiv .rsr2 {

height:100%;
width:100%;
overflow:hidden

}

rsoReportDiv .rsr3 {

height:100%

}

rsoReportDiv .rsr4 {

border-style:none

}

rsoReportDiv .rsr5 {

border-left-style:none

}

rsoReportDiv .rsr6 {

border-right-style:none

}

rsoReportDiv .rsr7 {

border-top-style:none

}

rsoReportDiv .rsr8 {

border-bottom-style:none

}

rsoReportDiv .rsr10 {

border-collapse:collapse

}

rsoReportDiv .rsr9 {

border-collapse:collapse;
table-layout:fixed

}

rsoReportDiv .rsr11 {

width:100%;
overflow-x:hidden

}

rsoReportDiv .rsr12 {

position:absolute;
display:none;
background-color:white;
border:1px solid black;

}

rsoReportDiv .rsr13 {

text-decoration:none;
color:black;
cursor:pointer;

}

rsoReportDiv .rsr14 {

font-size:0pt

}

rsoReportDiv .rsr15 {

direction:RTL;
unicode-bidi:embed

}

rsoReportDiv .rsr16 {

margin-top:0pt;
margin-bottom:0pt

}

rsoReportDiv .rsr17 {

height:100%;
width:100%;
display:inline-table

}

rsoReportDiv .rsr18 {

height:100%;
display:inline-table

}

rsoReportDiv * {

 box-sizing: border-box;

}

レポートチャート要素
Report chart
このエラーが問題の原因だと思います

ありがとう..

@ststeiger

こんにちは更新はありますか?

@chinturathod
私は現在、 CEF-pdfをwkhtml2Xの代替として、SwissReReportsで作業しています。

早くても2週間以上でこのプロジェクトを検討する時間があります。

アクセスを許可できるAspNetCore.ReportingServicesパッケージのリポジトリ(プライベートまたはその他)はありますか?

@clintb:私はあなたにアクセス権を付与することができますので、私は、あなたのgit LABのアカウント名を必要としています。
その後、リポジトリアクセスを含むgitlabアカウントのメールアドレスにメールが届きます。

ステファンさん、私のgitLabはc_l_i_n_tです。 ありがとう!

12:18ステファン・スタイガーで金、2019年4月26日には[email protected]
書きました:

@clintb https://github.com/clintb :私は、あなたのgit LABのアカウント名を必要とします
アクセスを許可します。
その後、gitのラボのメールアドレスにメールが届きます
リポジトリアクセスを含むアカウント。


あなたが言及されたのであなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/aspnet/AspNetCore/issues/1528#issuecomment-487133308
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/ABURO5ILQUEGMZARNW2HNALPSM2M5ANCNFSM4CFRN7MQ

@clintb :あなたは追加されました。

こんにちは@ststeiger 、よろしければ、ロッサツリーへのレポアクセスを許可してください。 あなたの仕事と助けに感謝します。

@lotsatrees :あなたが追加されました。

ステファンに感謝します。いつでも美味しいビールを買ってくれてうれしいです。

こんにちは@ststeiger 、私のgitlabはedgardoreyesです。 本当にありがとう。

@ststeiger
私のgitlabはikourfalnです
ありがとうございました

@ ikourfaln@ edgardoreyes :2つ追加しました。 gitlabに登録したメールアカウントにメールが届いているはずです。

@ststeiger 、自分自身(gitlabのMhirji)を追加することも可能ですか?

ありがとう!

@Mhirji :完了しました。

ありがとう!!!

レポートサーバープロジェクトを作成し、それをあらゆるプロジェクトタイプのサービスとして使用しないのはなぜですか?
ASP.NET Coreプロジェクトでは、レポートを表示するためにレポートサービスのURLのみが必要です。
そのアプローチに何か問題はありますか?

@ststeiger私もアクセスできますか? (gitlabのConstantDisaster)よろしくお願いします

@ConstantDisaster :追加されました。
@mshwf :いいえ、実際にはそれがまさに私がやりたいことです-独自のアプリケーションでレポートを実行でき、レポート

@ststeigerより良い選択肢はありますか? (このスレッドを読んでみましたが、とても長いです!)
また、GitLabリポジトリ(mshwf)へのアクセスを許可してもらえますか?
ありがとう

このリクエストをサポートしてください。Microsoftが私たちの話を聞いてくれることを願っています。

ねえ@ststeiger私も追加してくれませんか?
私のgitlabユーザー名はk3floです
どうもありがとうございます
VielenDank😊

@ststeiger追加してくれてありがとう、それでどうやってこれを再び使い始めるのですか? aspネットコアプロジェクトで? READMEか何かがあると思いました。ありがとう。

@ConstantDisasterAnyWebReporting\Any_TestCode\TestReport.cs 「例」があります。
パラメータとデータセットを含むレポートをPDFにレンダリングする方法を示します。

一言で言えば:
1)レポートパラメータの辞書を作成します。

System.Collections.Generic.Dictionary<string, string> parameters =
                new System.Collections.Generic.Dictionary<string, string>();

2)レポートにあるすべてのパラメータを辞書に追加します。

parameters.Add("in_language", "DE");
parameters.Add("in_something_uid", "9A892D4B-B4E3-4804-AAB6-97EAB37B7849");

3)新しいLocalReportベースのロードレポートを作成します

string fn = "/full/path/to/SomeReport.rdl";
AspNetCore.Reporting.LocalReport lr = new AspNetCore.Reporting.LocalReport(fn);

次に、パラメーターでのみ使用されるすべてのデータセットに対して、空のデータテーブル(NULLではない)を追加できます。
lr.AddDataSource("SEL_Standort", new System.Data.DataTable());

また、使用するすべてのデータセットについて、そのデータセットのクエリの結果をデータテーブルに入力し、データセットをデータソースに追加する必要があります。

lr.AddDataSource("DATA_Schluesselbestandeskontrolle", dt);

次に、レポートを実行し、結果をフェッチして、ドライブdなどのどこかに書き込むことができます。

var rr = lr.Execute(AspNetCore.Reporting.RenderType.Pdf, 1, parameters, "");
System.IO.File.WriteAllBytes(System.IO.Path.Combine(@"d:\", "Bestandeskontrolle.pdf"), rr.MainStream);

ドラフトバージョンにあったReportViewer2014&2017レポートインターフェイスのデザインを模倣したサンプルHTMLページを追加しました。 gitから再度フェッチすると、次の場所にあります。

AnyWebReporting\AnyWebReporting\wwwroot
AnyWebReporting/AnyWebReporting/wwwroot/index.htm
AnyWebReporting/AnyWebReporting/wwwroot/index2014.htm
AnyWebReporting/AnyWebReporting/wwwroot/logon.htm

以上です。
レポートをWebで表示する必要がある場合は、それぞれの列挙型をlr.Execute(RenderType.HTML5_0またはHTML4_0またはMhtml)に渡して、正しいページ番号を渡すことにより、htmlにレンダリングできます。 結果(HTML)はMainStreamにあり、CSSはSecondaryStreamにあります。

ただし、ReportViewerのindex.htmをJavaScriptでlr.Executeに接続するには、今のところ自分で行う必要があります。 まだそれをすることに取り掛かっていませんでした。 今のところ、電子メールに追加するPDFを生成するために必要です。

@ k3flo @mshwf :追加されました。

@mshwf

@ststeigerより良い選択肢はありますか? (このスレッドを読んでみましたが、とても長いです!)

私の知る限りではありません、そうでなければ私はそれを使用するでしょう。
.NET Core 3.1リリース(LTS)の後で、この点に関して何かが見られるかもしれません。そうすれば、.NETCoreに基づいてWindowsのみのReportViewerを自由に作成できるからです。

ただし、このようなことはこのプロジェクトと同じくらいのブリコラージュになるため、System.Drawing(およびGDI +へのWinAPI呼び出し)コードをすべて削除し、適切に実行するのに時間がかかる可能性があります。つまり、クロスプラットフォーム。 私の意見では、これはありそうもないですが。 でも前向きに驚いても不幸ではありません(咳)。

重要なのは、レポートにVBコードを含めることができ、.NET Core(<3)でのVBサポートは、現時点では疑わしいものです-せいぜい。 これは.NETCore 3によって修正される(=理論的には修正されるはずです)。ReportViewerを作成する場合、少なくともLTSがリリースされるまで待つ可能性が高いでしょう。

@mshwf
このスレッド全体を読む必要はありません。
あなたがする必要があるのは、プロジェクトをgit-cloneし、サンプルレポートを見るだけです(ただし、それを実行するためのデータベースはありません)。

gitlabに追加していただけませんか?
dcga

@dcga :追加されました。

こんにちは、gitlabに私を追加していただけませんか? 現在、レポートをASP.netCoreプロジェクトに変換しています。

@ ericyu67 :あなたのgitlabアカウント名はericyuだと思いますか? その場合、あなたは追加されました。

そうです、ありがとうございます。

@ststeiger追加して
rodrigorrl

@rodrigorrl :追加されました。

@ststeiger追加して

@myersBR :完了しました。

@ststeiger追加してくれませんか?

@acofalc :@ aco.mitを追加

こんにちは、 @ ststeiger私を追加してください:oblin228、ありがとう。

これに関するニュースはありますか? ASP.NET Coreを使用していますが、Webフォームに戻ることを拒否しています。 レポートプロジェクトがあり、ファイルをダウンロードするためにレポートサーバーからアプリケーションにURLをフィードします。 問題は、それが常にWindows認証を要求することであり、私はこれを避けたいと思っています...

@oblin :追加されました。

@jfcaldeira :Windowsでアプリケーションを実行している限り、gitlabのreportviewerは多かれ少なかれ機能するはずです(これまでのところ、HTML出力の画像に関する未解決の問題)。 Linuxで実行すると、出力形式としてPDF、TIFF、またはPowerPointを使用しない限り(単語がわからない)動作するはずですが、Excel、html、xml、およびjsonもLinuxで動作しました(私の1レポートテスト-完全な機能セットを使用しても何も爆発しないかどうかはわかりません)。

ただし、問題がSSRSでのWindows認証である場合は、カスタムセキュリティ(別名SSRSフォーム認証)を使用してみませんか。

そのためには、ここを参照してください:
https://www.codeproject.com/Articles/675943/SSRS-2012-Forms-Authentication
https://github.com/ststeiger/SSRS-Localizer
https://github.com/ststeiger/CustomHttpHeaders
https://github.com/microsoft/Reporting-Services/tree/master/CustomSecuritySample

SSRS-auth-cookieがドメイン間でIEに保持されるようにするには、JavaScriptのForm-Postを使用してユーザーにログインし、P3Pポリシー(httpモジュールを介してSSRSで)を設定する必要がある場合があります...(注:仮想ディレクトリを使用していて、1つのSSRSに2つのアプリケーションがある場合、[SSRSドメインにある] application1のauth-cookieは、SSRSドメインにもあるapplication2のauth-cookieを上書きします。

@oblin :追加されました。

@jfcaldeira :Windowsでアプリケーションを実行している限り、gitlabのreportviewerは多かれ少なかれ機能するはずです(これまでのところ、HTML出力の画像に関する未解決の問題)。 Linuxで実行すると、出力形式としてPDF、TIFF、またはPowerPointを使用しない限り(単語がわからない)動作するはずですが、Excel、html、xml、およびjsonもLinuxで動作しました(私の1レポートテスト-完全な機能セットを使用しても何も爆発しないかどうかはわかりません)。

ただし、問題がSSRSでのWindows認証である場合は、カスタムセキュリティ(別名SSRSフォーム認証)を使用してみませんか。

そのためには、ここを参照してください:
https://www.codeproject.com/Articles/675943/SSRS-2012-Forms-Authentication
https://github.com/ststeiger/SSRS-Localizer
https://github.com/ststeiger/CustomHttpHeaders
https://github.com/microsoft/Reporting-Services/tree/master/CustomSecuritySample

SSRS-auth-cookieがドメイン間でIEに保持されるようにするには、JavaScriptのForm-Postを使用してユーザーにログインし、P3Pポリシー(httpモジュールを介してSSRSで)を設定する必要がある場合があります...(注:仮想ディレクトリを使用していて、1つのSSRSに2つのアプリケーションがある場合、[SSRSドメインにある] application1のauth-cookieは、SSRSドメインにもあるapplication2のauth-cookieを上書きします。

こんにちは、私の問題について返信していただきありがとうございます。 gitlabでこのreportviewerのことを聞いたことがありませんが、アンカーを見せていただけますか?

また、Windows認証については、ASP.NET CoreのアプリケーションでCookie認証を使用してユーザーを認証しているため、ユーザーがレポートにアクセスできるようにするための回避策は、基本的に、パラメーターを含む直接URLをアンカーのhrefに渡すことです。また、フォーマットとしてPDFを選択します。 エンドユーザーが2回認証しなければならないのは煩わしいので、ユーザーに認証を求めない方法を見つけようとしていました。 私はすでにデータソースアクセスのためだけに特定のアカウントを使用しています、それは1つ下です。

こんにちは、 @ ststeiger-私のgitlabはarunputhranです。 アクセスを許可してもらえますか? どうもありがとう!

すべての「gitlabへのアクセスを許可する」リクエストに埋もれてしまったため、これを再投稿します。

このスレッドに出くわしたすべての人は、これが追加される.NET Core SSRSに投票する必要があります: https

上から7番目に開始し、上から4番目に上昇し、最も要求されたSQL Server機能(https://feedback.azure.com/forums/908035-sql-server?category_id=325159)

編集:この投稿のため、今では3位まで

それでも役立つかどうかはわかりません...

@arunputhrankyc :追加されました。

@ k290
どうやら、彼らはまだSQL-ops-studio / AzureDataStudioについて聞いたことがありません。

その精神で、誰かが冗談のように、そのウィッシュリストにフラットなデザインを追加する必要があると思います。
悲しいことに、それはまだ4月1日ではありません:wink:

ちなみに、私はWeb APIからPDFとしてレポートを取得し、wcfビットを使用していません。
soap / asmx呼び出しとhttp呼び出しだけです。
それらを行う際に、私は問題なくクレジットを渡します。
私のコードはasp.net4.6 / web api2です
私が何をしているのかを知りたい場合は、来週githubにコードを載せてチェックアウトすることができます。
私はレポートサーバー2016を呼び出していますが、私が行っていることのほとんどは、古いssrsリリースで機能します。

こんにちは、私はあなたがSSRSをどのように扱っているかについてのあなたのこのコメントを読みました。 私も同様のことをしています。ASP.NETCoreアプリケーションにアンカーがあり、パラメーターと形式拡張子が含まれたレポートへの直接のURLがあります。 ただし、問題は、Windows認証を要求することです。 ユーザーがすでにCookie認証を使用してアプリにログオンしているため、これを尋ねるのをやめる方法はありますか? ダウンロードされている限り、レポートを表示することすら気にしませんが、認証をスキップするとよいでしょう

@arunputhrankyc :追加されました。

@ k290
どうやら、彼らはまだSQL-ops-studio / AzureDataStudioについて聞いたことがありません。

その精神で、誰かが冗談のように、そのウィッシュリストにフラットなデザインを追加する必要があると思います。
悲しいことに、それはまだ4月1日ではありません😉

確かにSSMSのダークテーマで殺すつもりですが、そのSSRSでは素手で食べます。 グループ化されたデータをSQLから直接レンダリングすることで節約できる作業量は驚くべきものです。

素晴らしい解決策、gitlabに私を追加してください: @kholossok 、ありがとう

gitlabにも私を追加してください:@EMaderbacher

@ kholossok@ EMaderbacher :追加されました。

私も追加してください@jfcaldeira

@jfcaldeira:あなたは私のgitラボアカウントを与える必要があります。
これはgitハブアカウントです。
それは無料です。 https://gitlab.com
当時、プライベートリポジトリはgithubで無料ではありませんでした。

@ststeiger
プライベートリポジトリはGitHubで無料になりました。制限は、共同編集者の数にあります。

@jfcaldeira:あなたは私のgitラボアカウントを与える必要があります。
これはgitハブアカウントです。
それは無料です。 https://gitlab.com
当時、プライベートリポジトリはgithubで無料ではありませんでした。

同じユーザー名でアカウントを作成しました

@jfcaldeira :追加されました。 アクセス情報が記載されたメールが届いているはずです。
@ikourfaln :わかっています。 ただし、githubプライベートリポジトリでは3人の共同編集者に制限があることを知りませんでした。 それを知って良かった、ありがとう

Gitlabの制限:

今日の朗報を祝うために、GitLab.comのリポジトリごとのストレージ制限を5GBから10GBに恒久的に引き上げました。 以前と同様に、GitLab.comのパブリックリポジトリとプライベートリポジトリは無制限で、転送制限はなく、無制限の共同作業者が含まれています。

私も追加してもいいですか? 私のGitLabアカウントはbarryjsilverです。 ありがとう!

追加してもらえますか? @jyanosuありがとうございます!

@BarryJSilver :追加されました。

@jyanosu:私はgithubのない、gitのラボ.COMアカウントが必要です。

@ststeigerおっと、設定するだけです。同じユーザー名@jyanosu

@jyanosu :追加されました。

@ststeiger私のgitlabアカウントを追加できますか@ kanichi123
ありがとうございました!

@ kanichi123 :追加されました。

@ststeiger私のアカウントもシェリー

@sheryever :追加されました。

@ststeiger私のgitlabアカウントを追加してください@PentaTech
ありがとうございました!

@ststeiger私も追加してもらえますか? @glebteterin
ありがとうございました!

@ PentaTech 、@ g-rad:追加されました。

@ststeigerこれに頑張ってください。gitlabアカウントbrad0000を追加していただけませんか?

@ brad0000 :完了しました。

こんにちは@ststeiger 、私も追加してもらえますか? gitlabアカウント:wyepez。 ありがとう

@wyepez :追加されました。

@ststeiger私も追加していただけませんか?

Gitlabユーザー名:choudeshell

@choudeshell :追加されました。

追加してもらえますか? ありがとう!

ソリューションは.rdlc(およびサーバー側の.rld)で機能しますか? ありがとう

ソリューションは.rdlc(およびサーバー側の.rld)で機能しますか? ありがとう

@mpirritano :はい、実際、RDLとRDLCの間に大きな違いはありません。
しかし、それはウェブのみです。 Windowsフォームはありません。
私はgithubのない、あなたを追加するgitのラボアカウントが必要です。

@ststeigerありがとう-私は今GitLabアカウントを作成しました:@mdpirrit

それは素晴らしいことです-.NETCoreを対象とするASP.NETCoreにのみ必要です。 ありがとう!

@mpirritano :追加されました。gitlabの登録に使用したメールアカウントにメールが届いているはずです。

とった; ありがとう!

@ststeigerは、グラフをレンダリングできないことを除いて、うまく機能します。 -グラフ領域を次のエラーでレンダリングします: "ファイルまたはアセンブリを読み込めませんでした" System.Windows.Forms、Version = 4.0.0.0 "

これは既知の制限ですか、それとも何かが足りませんか?

ありがとう

@ststeigerまた、サブレポートがサポートされているようには見えません。 つまり、サブレポートインスタンスにデータソースを追加するためのサブレポート処理イベントハンドラーがないようです。

ありがとう

追加してもらえますか? ありがとう! @ashabyralieva

ソリューションは.rdlc(およびサーバー側の.rld)で機能しますか? ありがとうございました

@mpirritano :はい、RDLとRDLCの間に大きな違いはありません。
しかし、これは単なるネットワークです。 Windowsフォームはありません。
私は、ないGitHubのあなたを追加するためにGitのラボアカウントが必要です。

追加してもらえますか? ありがとうございました! @ashabyralieva

@azikaa :完了しました。 Добавлено;)

@mpirritano

これは既知の制限ですか、それとも何かが足りませんか?

ええ、それが存在する可能性があることを私が知っていた1つの制限。
また、HTMLでの画像出力に問題があります。
オープンポイント。
私はまだサブレポートについて考えていませんでした。
残念ながら、私たちにもいくつかあるので、これも私の問題になります。
そういえば、サブレポートがフルフレームワークの通常のReportViewerでどのように処理されるか、特に再帰的である可能性があるため、私も知りません。

「System.Windows.Forms、Version = 4.0.0.0」は、.NET Coreのそのバージョンには存在せず、アセンブリは、ReportViewerの代わりにSystem.NetStandard.Formsと呼ばれるため、おそらくどこかに問題があります。 .NETCore。 System.Windows.Forms、Version = 4.0.0.0が存在するため、完全なフレームワークで動作する可能性があります。

System.Windows.Formsの問題は、アセンブリ名とバージョン(ソースコードに隠されている場所)をifdefに入れるのと同じくらい簡単に修正できますが、サブレポートは私が推測するものではありません。

今週はまだレポート送信サービスを終了する必要があるので、来週のいつかSystem.Windows.Formsの問題を見ることができるかもしれません。

サブレポートに関する限り、とにかく悪い考えであり、PDFとExcelで問題が発生する傾向があります。レポートが1つしかない場合は、何らかの方法でサブレポートを完全に削除できないかどうかを確認することをお勧めします。 、および1つのレポートに含まれるすべてを作成します。

Добавлено
データベースCOR_Basic_SwissLife_UATを取得する方法は?

:rofl:ハハ、いいね、そうじゃない、DBは機密だ。
ただし、独自のデータベースを使用して、独自のサンプルレポートを作成できます。
例からその使い方がわかるはずです。

@ststeigerありがとう。 実際、AsNetCore.Reporting.InternalLocalReportで定義されたSubreportProcessingイベントがあることがわかります。 このためのパブリックインターフェイスを作成して、データソースをサブレポートインスタンスに渡すことができるかどうかを確認することができます。 私も来週までこれに到達しないかもしれません...

サブレポートも避けようとしていますが、繰り返しセクション内に繰り返しセクションが必要な場合に必要であることがわかりました。 Excelに関しては、各サブレポートインスタンスをrdlc / rdlを使用してExcelのワークシートとしてレンダリングすることができます。

新規参入者のためにこれを再投稿します。

このスレッドのすべての人が、これが追加されることに投票する必要があります: https

今年の3月は上から7位でした。

これで、SQL Serverの提案の上から2番目になりました: https

ダークモードに勝つことはできますか?

@ststeiger今日は実際に少し時間があり、.docx、.xlsx、および.pdfのサブレポートを使用してレポートを正常にレンダリングできました。

ローカルコピーの簡単なテストとして、「LocalReport」クラスの「localReport」プロパティのアクセス修飾子を「internal」から「public」に変更しました。 次に、いつものように「SubreportProcessing」イベントのハンドラーを作成できます(サブレポートインスタンスのパラメーターの値を読み取り、それを使用して、サブレポートインスタンスのデータソースに渡すデータセットをフィルター処理します)。

.NETCoreでグラフのレンダリングの問題を修正する方法がわかりません。 ですから、もしあなたが驚くべき解決策にたどり着くことができたら。 しかしそれ以外は、あなたのソリューションは私が必要とするすべてを実行すると思います(私は個人的にレポートをHTML形式でレンダリングすることはありません)

ありがとう

export-word、目覚めないのに優れていますか?
FormatException:ヘッダーのインデックス0に無効な値が含まれています: ''

サービスは非常に遅いです。 何ができる? 助けてください....

みなさん、SSRSに組み込まれているReportExecutionService.asmxを使用して、レポートビューアコントロールのカスタムポートを作成し終えたところです。ASP.NETMVCをターゲットにしていました。 誰かに.NetCoreとMVCへの移植を提案してもらったので、それを完了しました。 試してみて、皆さんの考えを教えてください: https

アラン

export-word、目覚めないのに優れていますか?
FormatException:ヘッダーのインデックス0に無効な値が含まれています: ''

サービスは非常に遅いです。 何ができる? 助けてください....

@azikaa :MvcReportViewerまたはAspNetCore.ReportViewerを使用していますか?

この問題はこのレポに直接関連しておらず、ここでのコメントに基づいて、SSRSチームはすでにこのフィードバックを認識しているため、この問題をクローズします。 コメントの量を考えると、これは今では管理できません。

@ k290の応答は、ここでは最も実用的なものですので、彼の提案に従ってくださいここに

新規参入者のためにこれを再投稿します。

このスレッドのすべての人が、これが追加されることに投票する必要があります: https

今年の3月は上から7位でした。

これで、SQL Serverの提案の上から2番目になりました: https

ダークモードに勝つことはできますか?

このページは役に立ちましたか?
0 / 5 - 0 評価