2017-10-28 295 views
0

与NuGet包相关的项目发布后生成事件的执行顺序是什么?我有一个NuGet软件包,将不需要的文件复制到我的输出目录(有DLL和EXE,在我的情况下,我不需要后者)。的VS2017在发布后事件中删除NuGet文件

del /f /q "$(TargetDir)directory\*.exe" 

通常的想法是不行的,很可能是它的VS(的MSBuild)实际拷贝这些文件之前调用。

+0

它不会被NuGet复制文件到输出目录,它将成为MSBuild。你的NuGet包是什么样的?我假设它具有所有这些文件在lib目录中,所以NuGet将在项目文件中添加对这些文件的引用。如果你想避免在NuGet包中使用自定义的MSBuild目标文件,那么你可以自定义构建,或者只是将任何.exe文件添加到NuGet包中的工具文件夹中。但是我不确定你想要的NuGet包。 –

+0

另外:基于'packages.config'的项目或使用新的'ProjectReference'系统? (后者可以从包中排除资产(compile/contentFIles/...) –

+0

新的。使用较早的(包文件夹),是的,我可以简单地修改包的本地副本并删除不必要的文件。但更新的缓存机制并不那么简单。如果我能避免它,我并不想改变NuGet。我只是想在完成所有事情之后从我的输出中删除一些不必要的文件。我会检查排除。 –

回答

1

很可能它是在VS(MSBuild)实际复制这些文件之前调用的。

根据注释的信息:

<Target Name="CopyNativeBinaries" AfterTargets="Build">,这是从包中的目标文件 。

此导入MSBuild目标会在构建完成后执行复制任务,这会导致后期构建中的删除命令行失败。这就是CopyNativeBinaries目标在PostBuildEvent之后四步的原因。

要解决这个问题,我们可以目标CopyNativeBinaries后生成后事件命令行转换为目标的顺序:

具体步骤:

  1. 删除生成后事件。
  2. 卸载您的项目。然后,在项目的最后,刚刚结束标记,地点如下脚本之前:

    <Target Name="DeleteFile" AfterTargets="CopyNativeBinaries"> 
        <ItemGroup> 
        <FileToDelete Include="$(TargetDir)directory\*.exe"/> 
        </ItemGroup> 
        <Exec Command="del /F /Q &quot;@(FileToDelete)&quot;"/> 
    </Target> 
    

此设置后,将DeleteFile目标CopyNativeBinaries后执行。

+0

谢谢,差不多。德尔并不喜欢所提供的文件列表,所以给它一个通配符的更直接的解决方案直接解决了它。非常好的想法和后见之明非常合乎逻辑。 :-)'' –

相关问题