我有几个问题:
如果有错误必须显示给客户端 - 使用STDERR流而不是STDOUT是一件好事吗?或者这是一个微不足道的问题?
我想为此实用程序的输出消息添加颜色支持.我是否必须使用一些环境容忍框架?(它可以是256色模式和"纯色"模式).或者如何让它宽容?
我害怕为输出添加颜色,因为客户端可能会将输出重定向到日志文件.因此可能会"破坏"任何东西吗?
请帮我构建这个实用程序UNIX-way(Do one thing and do it well).
我正在尝试使用Topshelf.Log4Net和log4net配置基于Topshelf的Windows服务以登录到自定义事件日志.如果我在命令行模式下运行应用程序,这可以正常工作.当我尝试安装服务时BillsTestService.exe install,我得到:
INFO Topshelf v3.1.107.0, .NET Framework v4.0.30319.18052
DEBUG Attempting to install 'BillsTestService'
Running a transacted installation.
...
Service BillsTestService has been successfully installed.
Creating EventLog source BillsTestService in log Application...
An exception occurred during the Install phase.
System.ArgumentException: Source BillsTestService already exists on the local computer.
...
at System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData)
Run Code Online (Sandbox Code Playgroud)
我EventLog.DeleteEventSource("BillsTestService");在安装之前试过在LINQPad中运行; 成功,但后续服务安装仍然失败.
我的log4net appender配置是:
<appender name="ErrorEventLogAppender" type="log4net.Appender.EventLogAppender" >
<threshold value="ERROR" />
<logName value="MyCompanyServices" />
<applicationName value="BillsTestService" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5level %logger - %message%newline" /> …Run Code Online (Sandbox Code Playgroud) 我正在尝试从我正在创建的对象中包含的私有对象中公开一些事件,看起来编译器对此很满意:
private WindowUpdateServer _windowUpdateServer;
public event WindowUpdateHandler WindowUpdated;
public RecieveWindowFramesManager() {
_windowUpdateServer = new WindowUpdateServer();
_windowUpdateServer.ExistingWindowUpdated += WindowUpdated; // ExistingWindowUpdated is a WindowUpdateHandler
}
Run Code Online (Sandbox Code Playgroud)
但是在RecieveWindowFramesManager初始化之后_windowUpdateServer.ExistingWindowUpdated == null.
我在这里遗漏了什么 - 看来这应该有用吗?
值得注意的是,在RecieveWindowFramesManager初始化之后,我将一个事件监听器附加到WindowUpdated但它永远不会被调用(即使_windowUpdateServer.ExistingWindowUpdated被触发).
我想知道是否有一种简单的方法可以在单个(Linq/Where)查询中放置两个Lambda表达式?
例如,我目前使用以下内容调用方法:
string testing = "blablabla";
if(testing == "" || testing == null)
Run Code Online (Sandbox Code Playgroud)
我尝试了一些组合,例如:
testing.Where(x => x == ("") || x=> x == null);
Run Code Online (Sandbox Code Playgroud)
但上述方法无效.我知道我可以设置一个返回谓词/布尔值的方法,但是,此刻,我对Lambdas感兴趣并且只是想知道如何实现这一点.
我需要链接多个Where方法,还是有办法实现多个Lambdas?
(ps我知道IsNullOrEmpty,这只是我能想到的第一个例子!)
我想创建一个通用函数,它将两个函数作为参数并返回结果。我希望类型强制两个函数具有相同的签名,但不是该签名是什么(返回类型除外)。
我可以这样定义类型:
type Func<TResult> = (...args: any[]) => TResult;
function foo<TResult>(f: Func<TResult>, g: Func<TResult>): TResult { ... }
Run Code Online (Sandbox Code Playgroud)
这允许所需的参数:
function f1(s: string, i: number): boolean { return true; }
function g1(s: string, i: number): boolean { return false; }
foo<boolean>(f1, g1);
Run Code Online (Sandbox Code Playgroud)
不幸的是,它还允许具有不同签名的函数:
function g2(b: boolean): boolean { return false; }
foo<boolean>(f1, g2);
Run Code Online (Sandbox Code Playgroud)
是否可以允许前一个调用编译但不允许后者编译?
请注意,我希望它适用于任何参数列表(空、一个参数、两个参数等),但两个函数的参数类型应该匹配。