【问题标题】:Nantcontrib <record> taskNantcontrib <记录> 任务
【发布时间】:2013-03-20 20:43:51
【问题描述】:

我正在尝试将日志文件附加到电子邮件。

我的代码是:

**<loadtasks assembly=".../tasks.dll" />
<record name="c:foo\log.txt" action="Start" />
<target name="email">
<mail
      from="abc@foo.com"
      tolist="xyz@foo.com"
      subject="Build"
      message="Build Failed"
      mailhost="smtp.anywhere.net">
      <files>
        <include name="c:foo\log.txt" />
      </files>
      <attachment>
        <include name="c:foo\log.txt" />
      </attachment>
    </mail>
</target>
<record name="c:foo\log.txt" action="Close" />**

我的命令是:

nant -f:filename.build email -l:c:foo\log.txt

我收到以下错误:

System.Security.SecurityException: Request for the permission of type 'System.Se
curity.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral,
 PublicKeyToken=b77a5c561934e089' failed.
   at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMa
rk& stackMark, Boolean isPermSet)
   at System.Security.CodeAccessPermission.Demand()
   at System.IO.FileSystemInfo.get_FullName()
   at NAnt.Contrib.Tasks.RecordTask.ExecuteTask()
   at NAnt.Core.Task.Execute()
   at NAnt.Core.Project.InitializeProjectDocument(XmlDocument doc)
   at NAnt.Core.Project.Execute()
   at NAnt.Core.Project.Run()

当我不使用 &lt;record&gt; 任务时,它会出现另一个错误,例如无法附加 txt 文件。因为它正在被另一个进程使用。

为什么会出现这个错误?

【问题讨论】:

  • 我认为**&lt;loadtaks 是问题中的错字,而不是您的 nant 脚本中的错字?
  • 对。这是问题中的错字。
  • 我想你在&lt;record&gt; 上看到了同样的问题,我认为这是错误的方法。除了记录,您是否可以尝试copying 文件然后附加副本,或者确定为什么c:\foo\log.txt 仍在使用并停止打开它的进程?

标签: nant nantcontrib


【解决方案1】:

我在发送电子邮件之前执行了类似刷新记录任务的操作,然后将文件复制到电子邮件中,希望这种解决方法有效

    <echo>${emailsubject}</echo>    
    <echo>Sending Email</echo>
    <echo>Attaching File : ${build.log.dir}/email_${build.log.filename}</echo>
    <echo>Attaching File : ${path.vsshelper.log}/logs/email_${build.log.getlistoffiles}</echo>

    <record name="${build.log.dir}/${build.log.filename}"       action="Flush" level="Verbose"/>
    <sleep milliseconds="5000" />
    <copy file= "${build.log.dir}/${build.log.filename}" tofile="${build.log.dir}/email_${build.log.filename}" />   
    <copy file= "${path.vsshelper.log}/logs/${build.log.getlistoffiles}" tofile="${path.vsshelper.log}/logs/email_${build.log.getlistoffiles}" />           

【讨论】:

  • 我仍然收到关于 任务的错误。我正在加载 nantconritb tasl.dll。我想有什么,我失踪了。但我得到了它的工作,使用msbuild。我使用了 msbuild 命令“/flp:” EX:/flp:erroronly;logfile=msbuild.err,我将其复制到文本文件并能够附加到电子邮件。没有任何错误。谢谢大家的帮助
  • 好,MSbuild 为你工作。我想我确实刷新,复制然后发送电子邮件
【解决方案2】:

在尝试通过电子邮件发送文件之前,请确保文件已关闭。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 2011-09-03
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多