0

我创建了一个 .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+ 应用程序时,错误就出现了。

4

0 回答 0