我已经在不同的环境(Windows,OsX和Linux)中使用jsReport lib
在Startup.cs
中,我使用此代码来启动库
services.AddJsReport(new LocalReporting()
.UseBinary(RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
? JsReportBinary.GetBinary()
: jsreport.Binary.OSX.JsReportBinary.GetBinary()).AsUtility()
.Create());
因此,如果不是Windows平台,他会为OSX寻找二进制文件。
但是当有人在Linux上使用项目时,他需要将代码更改为:
services.AddJsReport(new LocalReporting()
.UseBinary(RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
? JsReportBinary.GetBinary()
: jsreport.Binary.Linux.JsReportBinary.GetBinary())
如何编写将Windows用作主语言的三元条件,如果没有,它将在OSX和Linux之间进行选择?
答案 0 :(得分:4)
services.AddJsReport(new LocalReporting()
.UseBinary(
RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
? JsReportBinary.GetBinary()
: RuntimeInformation.IsOSPlatform(OSPlatform.Linux)
? Jsreport.Binary.Linux.JsReportBinary.GetBinary()
: Jsreport.Binary.OSX.JsReportBinary.GetBinary())
.Create();
但是写3个if
并这样做是比较容易的:
// I don't know the exact type, put the correct one here if it isn't this
JsReportBinary binary;
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
binary = JsReportBinary.GetBinary();
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
binary = Jsreport.Binary.Linux.JsReportBinary.GetBinary();
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)
binary = Jsreport.Binary.OSX.JsReportBinary.GetBinary());
else
binary = null;
services.AddJsReport(new LocalReporting().UseBinary(binary).Create());
答案 1 :(得分:1)
您可以执行以下操作:
RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
? JsReportBinary.GetBinary() :
RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ?
jsreport.Binary.OSX.JsReportBinary.GetBinary() :
jsreport.Binary.Linux.JsReportBinary.GetBinary())
答案 2 :(得分:0)
我还没有测试过,但是它可以工作,
services.AddJsReport(new LocalReporting()
.UseBinary((RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && JsReportBinary.GetBinary())
|| (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && Jsreport.Binary.Linux.JsReportBinary.GetBinary())
|| (Jsreport.Binary.OSX.JsReportBinary.GetBinary()))
.Create();
好处: 我们可以有任意数量的条件。