【发布时间】:2016-08-13 17:44:04
【问题描述】:
我想避免在 AfterClean 目标中对 dll 和文件夹名称进行硬编码,有没有一种动态方法可以做到这一点?理想情况下,它只会删除 AfterBuild 目标中由 Copy 创建的文件和文件夹。
我试图通过更改 DestinationFolder 以在 OutputPath 中包含一个子目录来简化此操作。 AfterClean 目标此时只需删除该子目录。但是,一些库的 DLLImport 路径没有考虑该子目录,这会导致崩溃。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="AfterBuild">
<ItemGroup>
<NativeLibs Include="$(MSBuildThisFileDirectory)..\lib\native\**\*.*" />
</ItemGroup>
<Copy SourceFiles="@(NativeLibs)" DestinationFolder="$(OutputPath)\%(RecursiveDir)" />
</Target>
<Target Name="AfterClean">
<Delete Files="$(OutputPath)\LumiAPI.dll" />
<Delete Files="$(OutputPath)\LumiCore.dll" />
<Delete Files="$(OutputPath)\LumiInOpAPI.dll" />
<RemoveDir Directories="$(OutputPath)\SPM" />
<RemoveDir Directories="$(OutputPath)\plugin" />
</Target>
</Project>
项目结构:
src
-
消费项目
- ConsumingProject.csproj
ConsumingProject.sln
-
包
-
我的项目.5.7.0.12
构建
-
库
-
原生
-
插件
- VenusDvc.dll
-
SPM
- sSPM_1.bin
LumiAPI.dll
LumiCore.dll
LumiInOpAPI.dll
-
net45
-
my-project.5.7.0.12.nupkg
-
基本上我想删除从本机文件夹复制到项目输出的所有文件和文件夹(即 LumiAPI.dll、LumiCore.dll、SPM(文件夹)、eSPM_1.bin 等)。但是我希望它足够通用,这样如果我将另一个文件夹添加到本机目录,它也会删除这些文件夹/文件。
【问题讨论】:
标签: msbuild