log4net在客户端PC中不起作用

时间:2016-03-21 09:32:51

标签: vb.net vsto log4net

我遇到了log4net的问题,它在客户端电脑中不起作用,但在我的开发电脑中,它可以创建并写入日志文件。

我的VSTO加载项使用的是log4net(使用NuGet安装了log4net包)。因此,在我的加载项功能区代码中,我添加了以下代码:

Ribbon.vb

<Assembly: log4net.Config.XmlConfigurator(Watch:=True)> 

<Runtime.InteropServices.ComVisible(True)> _
Public Class WordRibbon
Implements Office.IRibbonExtensibility

Private ribbon As Office.IRibbonUI
Private Shared ReadOnly log As log4net.ILog = log4net.LogManager.GetLogger(
    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)

......

的app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
    <section name="log4net"   type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />
</configSections>
<log4net>
    <root>
        <level value="ALL"/>
        <appender-ref ref="RollingFileAppender"/>
    </root>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="%envFolderPath{MyDocuments}\MyApp\AddInLog\WordAddin-log.txt" />
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="5" />
        <maximumFileSize value="5MB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
        </layout>
    </appender>
</log4net>

当我在开发PC中运行MS Word(从Visual Studio 2013调试或直接运行MS Word)时,log4net将能够在MyDocuments文件夹中创建日志文件。

但是当我在干净的虚拟机中运行加载项时,没有创建日志文件。这没有提示错误。我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:0)

我在vsto 4.0 sp1 will cause a VSTO Addin to not find its config file链接中发现了问题。

差异在于我的情况,加载项可以正确加载并且正常工作。只是log4net不知何故没有用。

之前:

在加载项注册表中,Manifest值将类似于

  

Manifest =&#34; C:\ Program Files \ MyApp \ WordAddIn.vsto | vstolocal&#34;

后:

在博客中,作者建议进行以下更改。

  

Manifest =&#34; file:/// C:/ Program Files / MyApp / WordAddIn.vsto | vstolocal&#34;

我认为这就是为什么log4net可以在我的开发电脑中运行的原因,因为Visual Studio对Manifest值使用相同的URI格式。

但就我的情况而言,我在下面试过,它也可以工作。

  

Manifest =&#34; C:\ Program Files \ MyApp / WordAddIn.vsto | vstolocal&#34;

我使用此URI是因为在我的应用程序中,在安装过程中,将根据用户选择创建addin注册表值路径。如果我想将其更改为file:///,这将涉及一些不同的文件(不仅仅是加载项),所以现在这是我的解决方案。 我不确定使用这种格式是否会导致任何问题。