Visual studio 在安装了Fody.Costura的情况下使用生成后事件

Visual studio 在安装了Fody.Costura的情况下使用生成后事件,visual-studio,post-build-event,fody-costura,Visual Studio,Post Build Event,Fody Costura,一旦我将Fody.Costura添加到我的项目中,我将生成的程序集复制到另一个位置的后期生成事件开始失败,并显示“拒绝访问”消息。这是有道理的,因为Costura使用MSBuild嵌入程序集。有没有办法在Costura完成后强制执行我的后期构建?生成后命令的示例: copy /Y "$(TargetPath)" "%ALLUSERSPROFILE%\Autodesk\Revit\Addins\2019\HOK-Addin.bundle\Contents" 基本上,我自己问题的解决方案如下

一旦我将Fody.Costura添加到我的项目中,我将生成的程序集复制到另一个位置的后期生成事件开始失败,并显示“拒绝访问”消息。这是有道理的,因为Costura使用MSBuild嵌入程序集。有没有办法在Costura完成后强制执行我的后期构建?生成后命令的示例:

copy /Y "$(TargetPath)" "%ALLUSERSPROFILE%\Autodesk\Revit\Addins\2019\HOK-Addin.bundle\Contents"

基本上,我自己问题的解决方案如下

  <Target Name="CopyFiles" AfterTargets="AfterBuild;NonWinFodyTarget">
    <Message Text="Signing file..." Importance="high" />
    <Exec Command="&quot;C:\Program Files (x86)\Windows Kits\10\bin\10.0.17134.0\x64\signtool.exe&quot; sign /c &quot;Code Signing - DTM&quot; /v &quot;$(TargetPath)&quot;" />
    <Message Text="Copy files..." Importance="high" />
    <Message Text="$(TargetPath) &gt; $(ALLUSERSPROFILE)\Autodesk\Revit\Addins\$(Configuration)\HOK-Addin.bundle\Contents" Importance="high" />
    <Message Text="$(TargetDir)$(TargetName).addin &gt; $(ALLUSERSPROFILE)\Autodesk\Revit\Addins\$(Configuration)" Importance="high" />
    <Copy SourceFiles="$(TargetPath)" DestinationFolder="$(ALLUSERSPROFILE)\Autodesk\Revit\Addins\$(Configuration)\HOK-Addin.bundle\Contents" ContinueOnError="true" />
    <Copy SourceFiles="$(TargetDir)$(TargetName).addin" DestinationFolder="$(ALLUSERSPROFILE)\Autodesk\Revit\Addins\$(Configuration)" ContinueOnError="true" />
  </Target>

我所做的是将运行命令行例程的standatd-Post-Build命令替换为MSBuild
Target
Task
。在生成完成和Fody完成后为其指定运行标志合并程序集解决了我的问题

另一个有用的事实是,
Tasks
具有类似于
ContinueOnError=“true”
的标志,允许任务继续尝试,直到文件可用为止(如果这是问题所在),而不是命令行实用程序可能会失败


干杯

不太可能是福迪造成了这个问题。暂时禁用已安装的反恶意软件产品,然后重试。请记录您使用的内容。实际上,我可以通过自定义
Target
并使用
Copy
例程来解决此问题。我只是确保将我的
postertargets
设置为
AfterBuild;非WinFodyTarget
,这就成功了。在此之前,我只使用标准的生成后事件,该事件必须在Fody完成其工作之前执行,并且文件仍然被锁定。复制生成任务要聪明得多,它将在“拒绝访问”失败时重复重试复制。您不是第一个遇到反恶意软件问题的程序员。请记录你使用的东西,在我们了解什么是好的,什么是坏的之前,这些问题不会停止出现。我很好奇为什么你认为这是由反恶意软件引起的。在我添加Fody之前,后期构建命令运行良好。问题在于对该文件的访问被锁定/拒绝,可能是因为当命令触发时Fody正在使用它。我同意任务要好得多,但我怀疑是否涉及反恶意软件。能解释一下你的想法吗?