我创建了一个 .Net 对象(它是一个由 log4net 和 log4net.Ext.Json 组成的基本记录器)。此 .Net 对象作为 COM+ 应用程序添加到组件服务中,以使其可供某些遗留系统访问。
为了测试这个组件服务,我在 C# 中创建了一个控制台应用程序,它将创建对象的一个实例,然后调用我想要的方法LogMessage
:
static void Main(string[] args)
{
COMAdminCatalogCollection applications;
COMAdminCatalog catalog;
catalog = new COMAdminCatalog();
applications = (COMAdminCatalogCollection)catalog.GetCollection("Applications");
applications.Populate();
foreach (COMAdminCatalogObject application in applications)
{
if (application.Name.Equals("MyApplicationName"))
{
COMAdminCatalogCollection components;
components = applications.GetCollection("Components", application.Key);
components.Populate();
foreach (COMAdminCatalogObject component in components)
{
var instance = ComObjectGet(component.Name);
}
}
}
}
public static object ComObjectGet(string componentName)
{
Type type = Type.GetTypeFromProgID(componentName);
var COMobject = Activator.CreateInstance(type);
var COMobjectType = Activator.CreateInstance(type).GetType();
MethodInfo getAllMethod = COMobjectType.GetMethod("LogMessage");
object result = getAllMethod.Invoke(COMobject, new object[] { "First param", "Second param", "Third param" });
return COMobject;
}
执行line 时var COMobject = Activator.CreateInstance(type);
,出现此错误:
log4net:错误无法创建对象以设置参数:布局 log4net:错误找不到类型 [log4net.Layout.SerializedLayout,log4net.Ext.Json] System.IO.FileLoadException:无法加载文件或程序集'log4net,版本 = 2.0 .9.0,Culture=neutral,PublicKeyToken=669e0ddf0bb1aa2a' 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)
我正在使用log4net.Ext.Json
,因为我需要以 json 格式编写日志,但是,当我修改我的 log4Net 配置文件以使用默认 appender 时,它按预期工作,所以我的猜测是log4net.Ext.Json
. 这是我的 log4Net 配置文件:
<configuration>
<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="C:\Logs\MyLog_JSON.log" name ="RollingLogFileAppender" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<countDirection value="-1"/>
<datePattern value="yyyy-MM-dd"/>
<staticLogFileName value="true" />
<layout type="log4net.Layout.SerializedLayout, log4net.Ext.Json">
<member value="logDateTime%date:yyyy-MM-dd HH:mm:ss:ffff" />
<decorator type="log4net.Layout.Decorators.StandardTypesDecorator, log4net.Ext.Json" />
<member value="hostName" />
<default />
<remove value="date" />
<remove value="ndc" />
<remove value="message" />
<remove value="thread" />
<remove value="exception" />
<member value="logData:messageObject" />
</layout>
</appender>
<root>
<level value="All"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
</configuration>
我看到这个问题可以通过调用来解决,log4net.Config.XmlConfigurator.Configure();
但在我的情况下它不起作用,我也将 log4net 设置为调试模式<log4net debug="true">
,但是没有找到解决方案的新线索,我只是得到相同的引用错误。
值得一提的是,我直接在 Visual Studio 中调试了我的 .Net 组件,所有的事情都按预期工作,当对象被称为 COM+ 应用程序时,错误就出现了。