企业库日志记录 - Visual Studio - MONO - MacOSX - NotImplementedException
Enterprise Library Logging - Visual Studio - MONO - MacOSX - NotImplementedException
我正在尝试使用 Microsoft Enterprise Library 6.0.1304 为 Mac (Mono 6.0.0.296) 使用新的 VisualStudio。不幸的是,我无法使用它,因为引发了 "NotImplementedException"。
多年来我一直在使用 Enterprise Library,但在 Visual Studio (Windows Env.) 中它很棒,但是当我尝试在单声道下使用它时,一切似乎都不起作用。
经过一番搜索,我发现mscorlib.dll for MONO dows not support WindowsIdentity "User" 属性.
mscorlib.dll (4.0.0.0 - 单声道)
using System.Runtime.InteropServices;
[MonoTODO ("not implemented")]
[ComVisible (false)]
public SecurityIdentifier User {
get {
throw new NotImplementedException ();
}
}
申请:
public static void Main (string [] args)
{
LogWriter logWriter = new LogWriterFactory ().Create ();
Logger.SetLogWriter (logWriter, false);
logWriter.Write ("Application is working", "General", 5, 2000, TraceEventType.Information);
}
App.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
</configSections>
<loggingConfiguration name=""
tracingEnabled="false"
defaultCategory="General"
logWarningsWhenNoCategoriesMatch="false">
<listeners>
<add name="Rolling Flat File Trace Listener"
type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
fileName="RollingFlatFile.log"
footer="----------------------------------"
formatter="Text Formatter"
header="" rollInterval="Day"
traceOutputOptions="DateTime, Timestamp"
filter="All" />
</listeners>
<formatters>
<add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
template="Timestamp: {timestamp(local)}{newline}
Message: {message}{newline}
Category: {category}{newline}
Priority: {priority}{newline}
Severity: {severity}"
name="Text Formatter" />
</formatters>
<categorySources>
<add switchValue="All" autoFlush="true" name="General">
<listeners>
<add name="Rolling Flat File Trace Listener" />
</listeners>
</add>
</categorySources>
<specialSources>
<allEvents switchValue="All" name="All Events">
<listeners>
<add name="Rolling Flat File Trace Listener" />
</listeners>
</allEvents>
<notProcessed switchValue="All" name="Unprocessed Category">
<listeners>
<add name="Rolling Flat File Trace Listener" />
</listeners>
</notProcessed>
<errors switchValue="All" name="Logging Errors & Warnings">
<listeners>
<add name="Rolling Flat File Trace Listener" />
</listeners>
</errors>
</specialSources>
</loggingConfiguration>
</configuration>
跟踪到文件中的错误:
时间戳:12/07/201916:36:11
消息:消息处理失败。有关详细信息,请参阅下面的摘要信息。如果此问题仍然存在,请停止服务并检查配置文件中类别和接收器配置中可能存在的错误。
企业图书馆分销商服务摘要:
-->
信息:
时间戳:12/07/2019 14:36:11
消息:应用程序正在运行
类别:一般
优先级:5
事件编号:2000
严重性:信息
标题:
Mac海因:MacBook-Pro-di-John
应用域:F.B.Library.exe
ProcessId:无法读取内部 属性。错误信息:GetCurrentProcessId
进程名称:无法读取内部 属性。错误信息:GetModuleHandle
线程名称:
Win32 ThreadId:Unable 读取内在 属性。错误信息:GetCurrentThreadId
扩展属性:
--> MachineName: MacBook-Pro-di-John
--> 时间戳:12/07/2019 14:36:11
--> FullName: Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
--> 应用域名:F.B.Library.exe
--> Windows身份:jfk
异常信息详情:
异常类型:System.NotImplementedException
消息:方法或操作未实现。
数据:System.Collections.ListDictionaryInternal
TargetSite:System.Security.Principal.WindowsIdentity GetCurrent(布尔值)
帮助链接:NULL
资料来源:mscorlib
HResult:-2147467263
StackTrace 信息详情:
at System.Security.Principal.WindowsIdentity.GetCurrent (System.Boolean ifImpersonating) [0x00000] in /Users/builder/jenkins/workspace/build-package-osx-mono/2019-02/external/bockbuild/builds/mono-x64/mcs/class/corlib/System.Security.Principal/WindowsIdentity.cs:165
在 Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter.RevertExistingImpersonation () [0x0000f] 中:0
在 Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter.ProcessLog(Microsoft.Practices.EnterpriseLibrary.Logging.LogEntry 日志,System.Diagnostics.TraceEventCache traceEventCache)[0x00000] 在:0
在 Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter+<>c__DisplayClass13.b__12 () [0x0007f] 在 :0
从日志中可以清楚地看到System.Security.Principal.WindowsIdentity.GetCurrent 打破了规则...
你能帮我解决这个问题吗?
有没有人尝试在 MacOS 上将 Enterprise Library 与 Mono 一起使用?
是否有解决方法?
非常感谢您的帮助和时间。
此致,
我终于解决了这种情况。
首先,感谢所有评论,这些评论帮助我解决了很多问题。
基本上,我必须更改 MEL 6 代码的一部分,然后我才能毫无问题地使用它。
正如@SushiHangover 先前所建议的那样,我获取了 MEL 6 源代码并开始分析...我弄错了在 mscorlib.dll[= 中调用 SecurityIdentifier User
的部分代码13=]
我所做的是:
- 下载 MEL 6 源代码
- 用 Visual Studio 打开它 MAC
- 删除引擎不支持的所有测试项目和文件
- 编译直到一切正常
编译 prj 后,找到并评论以下部分的 "Impersonation" 部分:
private void ProcessLog(LogEntry log, TraceEventCache traceEventCache)
{
// revert any outstanding impersonation
//using (RevertExistingImpersonation())
//{
var items = new ContextItems();
items.ProcessContextItems(log);
var matchingTraceSources = GetMatchingTraceSources(log);
var traceListenerFilter = new TraceListenerFilter();
foreach (LogSource traceSource in matchingTraceSources)
{
traceSource.TraceData(log.Severity, log.EventId, log, traceListenerFilter, traceEventCache, ReportExceptionDuringTracing);
}
//}
}
Code Sample Image Link
之后重新编译,把编译好的dll用到自己的工程中,终于可以了。
如果您有任何进一步的问题或疑问,请告诉我,我很乐意回复。
祝你工作愉快,
此致,
弗罗林
我正在尝试使用 Microsoft Enterprise Library 6.0.1304 为 Mac (Mono 6.0.0.296) 使用新的 VisualStudio。不幸的是,我无法使用它,因为引发了 "NotImplementedException"。
多年来我一直在使用 Enterprise Library,但在 Visual Studio (Windows Env.) 中它很棒,但是当我尝试在单声道下使用它时,一切似乎都不起作用。
经过一番搜索,我发现mscorlib.dll for MONO dows not support WindowsIdentity "User" 属性.
mscorlib.dll (4.0.0.0 - 单声道)
using System.Runtime.InteropServices;
[MonoTODO ("not implemented")]
[ComVisible (false)]
public SecurityIdentifier User {
get {
throw new NotImplementedException ();
}
}
申请:
public static void Main (string [] args)
{
LogWriter logWriter = new LogWriterFactory ().Create ();
Logger.SetLogWriter (logWriter, false);
logWriter.Write ("Application is working", "General", 5, 2000, TraceEventType.Information);
}
App.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
</configSections>
<loggingConfiguration name=""
tracingEnabled="false"
defaultCategory="General"
logWarningsWhenNoCategoriesMatch="false">
<listeners>
<add name="Rolling Flat File Trace Listener"
type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
fileName="RollingFlatFile.log"
footer="----------------------------------"
formatter="Text Formatter"
header="" rollInterval="Day"
traceOutputOptions="DateTime, Timestamp"
filter="All" />
</listeners>
<formatters>
<add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
template="Timestamp: {timestamp(local)}{newline}
Message: {message}{newline}
Category: {category}{newline}
Priority: {priority}{newline}
Severity: {severity}"
name="Text Formatter" />
</formatters>
<categorySources>
<add switchValue="All" autoFlush="true" name="General">
<listeners>
<add name="Rolling Flat File Trace Listener" />
</listeners>
</add>
</categorySources>
<specialSources>
<allEvents switchValue="All" name="All Events">
<listeners>
<add name="Rolling Flat File Trace Listener" />
</listeners>
</allEvents>
<notProcessed switchValue="All" name="Unprocessed Category">
<listeners>
<add name="Rolling Flat File Trace Listener" />
</listeners>
</notProcessed>
<errors switchValue="All" name="Logging Errors & Warnings">
<listeners>
<add name="Rolling Flat File Trace Listener" />
</listeners>
</errors>
</specialSources>
</loggingConfiguration>
</configuration>
跟踪到文件中的错误:
时间戳:12/07/201916:36:11
消息:消息处理失败。有关详细信息,请参阅下面的摘要信息。如果此问题仍然存在,请停止服务并检查配置文件中类别和接收器配置中可能存在的错误。
企业图书馆分销商服务摘要:
--> 信息: 时间戳:12/07/2019 14:36:11 消息:应用程序正在运行 类别:一般 优先级:5 事件编号:2000 严重性:信息 标题: Mac海因:MacBook-Pro-di-John 应用域:F.B.Library.exe ProcessId:无法读取内部 属性。错误信息:GetCurrentProcessId 进程名称:无法读取内部 属性。错误信息:GetModuleHandle 线程名称: Win32 ThreadId:Unable 读取内在 属性。错误信息:GetCurrentThreadId 扩展属性: --> MachineName: MacBook-Pro-di-John --> 时间戳:12/07/2019 14:36:11 --> FullName: Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 --> 应用域名:F.B.Library.exe --> Windows身份:jfk
异常信息详情:
异常类型:System.NotImplementedException 消息:方法或操作未实现。 数据:System.Collections.ListDictionaryInternal TargetSite:System.Security.Principal.WindowsIdentity GetCurrent(布尔值) 帮助链接:NULL 资料来源:mscorlib HResult:-2147467263
StackTrace 信息详情:
at System.Security.Principal.WindowsIdentity.GetCurrent (System.Boolean ifImpersonating) [0x00000] in /Users/builder/jenkins/workspace/build-package-osx-mono/2019-02/external/bockbuild/builds/mono-x64/mcs/class/corlib/System.Security.Principal/WindowsIdentity.cs:165 在 Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter.RevertExistingImpersonation () [0x0000f] 中:0 在 Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter.ProcessLog(Microsoft.Practices.EnterpriseLibrary.Logging.LogEntry 日志,System.Diagnostics.TraceEventCache traceEventCache)[0x00000] 在:0
在 Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter+<>c__DisplayClass13.b__12 () [0x0007f] 在 :0
从日志中可以清楚地看到System.Security.Principal.WindowsIdentity.GetCurrent 打破了规则...
你能帮我解决这个问题吗? 有没有人尝试在 MacOS 上将 Enterprise Library 与 Mono 一起使用? 是否有解决方法?
非常感谢您的帮助和时间。 此致,
我终于解决了这种情况。 首先,感谢所有评论,这些评论帮助我解决了很多问题。 基本上,我必须更改 MEL 6 代码的一部分,然后我才能毫无问题地使用它。
正如@SushiHangover 先前所建议的那样,我获取了 MEL 6 源代码并开始分析...我弄错了在 mscorlib.dll[= 中调用 SecurityIdentifier User
的部分代码13=]
我所做的是: - 下载 MEL 6 源代码 - 用 Visual Studio 打开它 MAC - 删除引擎不支持的所有测试项目和文件 - 编译直到一切正常
编译 prj 后,找到并评论以下部分的 "Impersonation" 部分:
private void ProcessLog(LogEntry log, TraceEventCache traceEventCache)
{
// revert any outstanding impersonation
//using (RevertExistingImpersonation())
//{
var items = new ContextItems();
items.ProcessContextItems(log);
var matchingTraceSources = GetMatchingTraceSources(log);
var traceListenerFilter = new TraceListenerFilter();
foreach (LogSource traceSource in matchingTraceSources)
{
traceSource.TraceData(log.Severity, log.EventId, log, traceListenerFilter, traceEventCache, ReportExceptionDuringTracing);
}
//}
}
Code Sample Image Link
之后重新编译,把编译好的dll用到自己的工程中,终于可以了。
如果您有任何进一步的问题或疑问,请告诉我,我很乐意回复。
祝你工作愉快, 此致,
弗罗林