如何将.csproj文件的宏导入Directory.build.targets文件中使用?
结论
完全可以直接使用你提到的这些csproj内置宏,不需要额外做导入操作。
原理说明
Directory.Build.targets是MSBuild原生支持的全局配置文件,会被解决方案下的所有项目自动导入,所有csproj中可用的内置宏(比如$(TargetDir)、$(TargetName)、$(Configuration)、$(TargetFramework)等)都可以直接在这个文件内使用,取值和对应项目csproj中的取值完全一致。- 你示例的替换写法是完全正确的,相比硬编码灵活性高很多,后续就算修改项目输出路径、目标框架版本、编译配置(Debug/Release),都不需要手动调整路径。
优化后的完整Directory.Build.targets示例
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <BinaryFormats Include="$(TargetDir)$(TargetName).dll"/> <BinaryFormats Include="$(TargetDir)$(TargetName).pdb"/> </ItemGroup> <Target Name="CopyUnityPlugins" AfterTargets="Build"> <Copy SourceFiles="@(BinaryFormats)" DestinationFolder="$(SolutionDir)Assets\Plugins" /> </Target> </Project>
额外优化建议
如果你只想让这个复制逻辑作用于BinaryFormats这一个类库项目,而不是解决方案下的所有项目,可以给Target添加判断条件,避免其他项目编译时执行不必要的复制操作:
<Target Name="CopyUnityPlugins" AfterTargets="Build" Condition="'$(TargetName)' == 'BinaryFormats'"> <Copy SourceFiles="@(BinaryFormats)" DestinationFolder="$(SolutionDir)Assets\Plugins" /> </Target>
内容的提问来源于stack exchange,提问作者aybe
相关产品推荐
相关产品推荐

