VS2017在生成后事件中删除NuGet文件
与复制其文件的NuGet包相关的项目生成后事件的执行顺序是什么?我有一个NuGet包,它将不必要的文件复制到我的输出目录(有DLL和EXE,在我的情况下,我不需要后者)。通常的想法是VS2017在生成后事件中删除NuGet文件,nuget,visual-studio-2017,Nuget,Visual Studio 2017,与复制其文件的NuGet包相关的项目生成后事件的执行顺序是什么?我有一个NuGet包,它将不必要的文件复制到我的输出目录(有DLL和EXE,在我的情况下,我不需要后者)。通常的想法是 del /f /q "$(TargetDir)directory\*.exe" 不起作用,很可能是在VS(MSBuild)实际复制这些文件之前调用的 很可能是在VS(MSBuild)实际复制这些文件之前调用的 根据评论中的信息: ,这是 从包目标文件 此导入MSBuild目标将在生成完成后执行复制任务,这将导致生
del /f /q "$(TargetDir)directory\*.exe"
不起作用,很可能是在VS(MSBuild)实际复制这些文件之前调用的
很可能是在VS(MSBuild)实际复制这些文件之前调用的
根据评论中的信息:
,这是
从包目标文件
此导入MSBuild目标将在生成完成后执行复制任务,这将导致生成后的delete命令行失败。这就是为什么CopyNativeBinaries
目标在PostBuildEvent
之后出现四个步骤的原因
要解决此问题,我们可以将生成后事件命令行转换为目标,顺序为targetCopyNativeBinaries
:
详细步骤:
<Target Name="DeleteFile" AfterTargets="CopyNativeBinaries">
<ItemGroup>
<FileToDelete Include="$(TargetDir)directory\*.exe"/>
</ItemGroup>
<Exec Command="del /F /Q "@(FileToDelete)""/>
</Target>
CopyNativeBinaries
之后执行DeleteFile
很可能是在VS(MSBuild)实际复制这些文件之前调用的
根据评论中的信息:
,这是
从包目标文件
此导入MSBuild目标将在生成完成后执行复制任务,这将导致生成后的delete命令行失败。这就是为什么CopyNativeBinaries
目标在PostBuildEvent
之后出现四个步骤的原因
要解决此问题,我们可以将生成后事件命令行转换为目标,顺序为targetCopyNativeBinaries
:
详细步骤:
<Target Name="DeleteFile" AfterTargets="CopyNativeBinaries">
<ItemGroup>
<FileToDelete Include="$(TargetDir)directory\*.exe"/>
</ItemGroup>
<Exec Command="del /F /Q "@(FileToDelete)""/>
</Target>
DeleteFile
将在目标CopyNativeBinaries
之后执行,这对我来说很有效(MSBUILD v15)
这对我有用(MSBUILD v15)
将文件复制到输出目录将不是NuGet,而是MSBuild。你的NuGet软件包到底是什么样子的?我假设它在lib目录中有所有这些文件,所以NuGet将在项目文件中添加对这些文件的引用。如果您想避免这种情况,我将考虑在NuGet包中使用自定义MSBuild目标文件,以便您可以自定义生成,或者可能只是将任何.exe文件添加到NuGet包中的tools文件夹中。但是,我不确定您希望NuGet软件包做什么。另外:packages.config
基于项目还是使用新的ProjectReference
系统?(后一个可以从包中排除资产(编译/contentFIles/…))新的。对于前面的(包文件夹),是的,我可以简单地修改包的本地副本并删除不必要的文件。但使用较新的缓存机制并不是那么简单。如果我能避免的话,我真的不想改变NuGet。我只是想在一切完成后从输出中删除一些不必要的文件。我将检查排除。将MSBuild日志更改为详细信息(工具->选项->项目和解决方案->生成并运行)后,您将发现实际复制操作在执行生成后事件之前完成。您可以使用echo
显式记录已执行的目标。因此,您应该仔细检查delete命令行为什么不删除.exe文件。顺便问一下,那个包裹是定制的吗?如果没有,您可以将软件包ID和您不想复制的文件共享给我,我将对其进行测试。iMobileDevice-net,将有两个win7 xxx文件夹,其中包含DLL和EXE,第二个文件夹对于程序的运行是不必要的。我不知道他们为什么会出现在那里,我会联系开发人员,但我认为无论发生什么,删除他们都很容易。谢谢。将文件复制到输出目录不是NuGet,而是MSBuild。你的NuGet软件包到底是什么样子的?我假设它在lib目录中有所有这些文件,所以NuGet将在项目文件中添加对这些文件的引用。如果您想避免这种情况,我将考虑在NuGet包中使用自定义MSBuild目标文件,以便您可以自定义生成,或者可能只是将任何.exe文件添加到NuGet包中的tools文件夹中。但是,我不确定您希望NuGet软件包做什么。另外:packages.config
基于项目还是使用新的ProjectReference
系统?(后一个可以从包中排除资产(编译/contentFIles/…))新的。对于前面的(包文件夹),是的,我可以简单地修改包的本地副本并删除不必要的文件。但使用较新的缓存机制并不是那么简单。如果我能避免的话,我真的不想改变NuGet。我只是想在一切完成后从输出中删除一些不必要的文件。我将检查排除。将MSBuild日志更改为详细信息(工具->选项->项目和解决方案->生成并运行)后,您将发现实际复制操作在执行生成后事件之前完成。您可以使用echo
显式记录已执行的目标。因此,您应该仔细检查delete命令行为什么不删除.exe文件。顺便问一下,那个包裹是定制的吗?如果没有,您可以将软件包ID和您不想复制的文件共享给我,我将对其进行测试。iMobileDevice-net,将有两个win7 xxx文件夹,其中包含DLL和EXE,第二个文件夹对于程序的运行是不必要的。我不知道他们为什么会在冷杉林里