【发布时间】:2011-11-28 14:35:52
【问题描述】:
https://github.com/apache/log4net
我正在从上面的源代码编译log4net,但它没有通过验证:
[IL]:错误:[log4net.dll : log4net.Plugin.RemoteLoggingServerPlugin::Attach][offset 0x00000029] 方法不可见。
代码没问题:
public interface ILoggerRepository
{
...
}
public interface IPlugin
{
void Attach(ILoggerRepository repository);
}
public abstract class PluginSkeleton : IPlugin
{
public virtual void Attach(ILoggerRepository repository) { }
}
public class RemoteLoggingServerPlugin : PluginSkeleton
{
override public void Attach(ILoggerRepository repository)
{
base.Attach(repository);
...
}
}
https://github.com/apache/log4net/blob/trunk/src/Plugin/IPlugin.cs
https://github.com/apache/log4net/blob/trunk/src/Plugin/PluginSkeleton.cs
https://github.com/apache/log4net/blob/trunk/src/Plugin/RemoteLoggingServerPlugin.cs
调查显示调用RemotingServices.Marshal()失败:
override public void Attach(ILoggerRepository repository)
{
base.Attach(repository);
// Create the sink and marshal it
m_sink = new RemoteLoggingSinkImpl(repository);
try
{
**RemotingServices.Marshal(m_sink, m_sinkUri, typeof(IRemoteLoggingSink));**
}
catch(Exception ex)
{
LogLog.Error(declaringType, "Failed to Marshal remoting sink", ex);
}
}
但这里没有什么重要的。此外,使用任何类型调用 RemotingServices.Marshal() 都会导致同样的问题:
即使我将Attach() 更改为:
override public void Attach(ILoggerRepository repository)
{
RemotingServices.Marshal(null, null, typeof(int));
}
有人能找出问题所在吗?
【问题讨论】:
-
看起来很奇怪。 PEVerify 不会抱怨为 .Net 2.0 构建的程序集,但会抱怨它是否为 .Net 4.0 构建。
-
在项目属性.net 4.0 或.net 4.0 客户端中你的项目选择的框架是什么?
-
你如何从 vs 编译解决方案,如果是,是什么版本或从 bat 文件?
-
我下载了代码并在VS 2010中编译,没有任何错误或警告
标签: c# .net open-source log4net peverify