我在Visual Studio 2013中编写了一个简单的MS Word AddIn,我希望能够记录事件,最好是Windows事件查看器.如果我尝试为我的应用程序创建一个新的事件源,我似乎会遇到权限问题.我正在寻找最简单的方法来启用我的VSTO记录事件,这些事件不违反良好的编程指南.
我在MSDN文档中看到Office Solutions的事件记录:
您可以使用Windows中的事件查看器查看安装或卸载Office解决方案时Visual Studio Tools for Office运行时捕获的异常消息.您可以使用事件记录器中的这些消息来解决安装和部署问题.
使用VSTO 4.0源记录这些事件.我可以使用VSTO 4.0源来记录来自我自己的AddIn的错误,还是这被认为是不好的做法?
编辑:从Eugene Astafiev的回答和我在其他地方读到的内容看起来这将是一个糟糕的方法,因为VSTO 4.0源只应该处理AddIns的管理,而不是AddIns本身.其他问题的答案也建议不要使用"通用"来源.
作为替代方案,我可以包含一个简单的引导程序应用程序,它在安装过程中创建源代码,但我无法使用"属性">"在Visual Studio中发布"下的"安装设置"查看如何添加自己的先决条件.可以吗?还有另一种方法吗?我宁愿不必创建InstallShield Windows Installer,因为在其他方面,默认情况下创建的安装程序适用于我的目的.为了让事件记录工作,创建一个完整的安装程序似乎有些过分.
编辑:到目前为止,似乎没有"简单"的方法来做到这一点,尽管通过遵循链接的指令创建安装程序并不太复杂.
第三种选择是使用log4net或类似的日志记录框架并配置File Appender以记录到文件.
最初我并不是非常热衷于实现文件记录,因为a)我的应用程序不会非常频繁地记录,并且b)我想避免将日志文件分散在难以找到的各个位置.
编辑:这是我到目前为止所做的选项,因为它需要最少的配置,并且如果将来我的日志记录要求发生变化,则可以适应.
rud*_*den 17
设置log4net以处理简单(或复杂)日志记录要求相对简单.CodeProject上的log4net教程提供了有用的参考.
App.config如果您还没有文件,请添加文件(右键单击您的项目,选择添加>新项目...并从Visual C#项目中选择应用程序配置文件).编辑App.config文件看起来像这样(在<file />标签中适当地替换MyAddIn ):
<?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 value="${APPDATA}\My AddIn\MyAddin-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>
</configuration>
Run Code Online (Sandbox Code Playgroud)
日志文件将保存到用户的漫游AppData(%appdata%)文件夹中,最多可保存5个滚动日志文件,每个文件不超过5MB.
ThisAddIn_Startup()在ThisAddIn.cs中添加以下行(您需要添加一个using log4net;指令):
log4net.Config.XmlConfigurator.Configure();
Run Code Online (Sandbox Code Playgroud)将以下语句添加到需要实现日志记录的任何类中:
private static readonly log4net.ILog log =
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Run Code Online (Sandbox Code Playgroud)事件然后,可以使用所记录的log.Info,log.Warn,log.Error,log.Fatal由log4net的提供等方法.
您可能会收到架构警告消息,因为log4net不包含架构,Visual Studio无法验证配置部分.在这种情况下,请将模式文件从http://csharptest.net/downloads/schema/log4net.xsd下载到可访问的位置.其他地方C:\Program Files\Microsoft Visual Studio 10.0\Xml\Schemas 已建议使用该位置.
App.config在Visual Studio中选择文件,然后单击编辑器.你应该得到一个XML菜单项.从那里,选择Schemas ...并从保存它的位置添加log4net.xsd文件.
请注意,您也可以使用log4net 登录到事件查看器,但是您将遇到初始问题中引发的相同权限问题.