繁体   English   中英

将 a.csproj 的宏导入 Directory.build.targets 文件?

[英]Importing macros of a .csproj to a Directory.build.targets file?

我在解决方案文件旁边有以下Directory.build.targets文件:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <BinaryFormats Include="$(SolutionDir)Projects\BinaryFormats\bin\Debug\netstandard2.1\BinaryFormats.dll" />
        <BinaryFormats Include="$(SolutionDir)Projects\BinaryFormats\bin\Debug\netstandard2.1\BinaryFormats.pdb" />
    </ItemGroup>

    <Target Name="CopyUnityPlugins" AfterTargets="Build">
        <Copy SourceFiles="@(BinaryFormats)" DestinationFolder="$(SolutionDir)Assets\Plugins" />
    </Target>

</Project>

它的工作是将一些 class 库复制到$(SolutionDir)Assets\Plugins并以此实现。

但是,要复制的每个文件路径都是硬编码的。

问题:

是否有可能以某种方式导入 a.csproj 的宏并在文件中使用它们?

例如,为了能够使用以下语法而不是硬编码路径:

<ItemGroup>
    <BinaryFormats Include="$(TargetDir)$(TargetName).dll"/>
    <BinaryFormats Include="$(TargetDir)$(TargetName).pdb"/>
</ItemGroup>

是的,这行得通。 Directory.build.propsDirectory.build.targets文件分别为每个项目分别执行评估。 对于每个项目,相应的宏(例如$(TargetPath)$(ProjectPath) )将具有该特定项目的值。 所以你上面的例子<BinaryFormats Include="$(TargetDir)$(TargetName).pdb"/>应该像写的那样工作。

通过附加条件,您还可以使用这些文件有条件地扩展您的项目。 例如,我有一个大型解决方案(100 多个项目),其中Directory.build.props包含此部分:

<ItemGroup Condition="($(MSBuildProjectName.EndsWith('UnitTest')) OR $(MSBuildProjectName.EndsWith('IntegrationTest'))) AND '$(MSBuildProjectExtension)' == '.csproj'">
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.10.0" />
    <PackageReference Include="NUnit3TestAdapter" Version="4.0.0" />
  </ItemGroup>

这会自动将这两个包添加为对所有单元测试项目(并且仅限于这些)的引用,这不仅减少了项目文件本身的混乱,而且还允许我只更改一行代码即可升级这些包。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM