我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>
它的作業是將一些類別庫復制到$(SolutionDir)Assets\Plugins并實作。
但是有一點,要復制的每個檔案路徑都是硬編碼的。
題:
是否有可能以某種方式匯入 .csproj 的宏并在檔案中使用它們?
例如,為了能夠使用以下語法而不是硬編碼路徑:
<ItemGroup>
<BinaryFormats Include="$(TargetDir)$(TargetName).dll"/>
<BinaryFormats Include="$(TargetDir)$(TargetName).pdb"/>
</ItemGroup>
uj5u.com熱心網友回復:
是的,這有效。在Directory.build.props和Directory.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>
這會自動將這兩個包添加為所有單元測驗專案(僅限這些)的參考,這不僅減少了專案檔案本身的混亂,而且還允許我只更改一行代碼即可升級這些包。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/368735.html
