我有一个Msbuild项目和一个包含20个项目的解决方案。这需要在VS和dotnet cli下进行编译(w/o特殊参数)
有些项目位于方案的根目录,其他则位于子文件夹中:
SolutionRoot
/Proj1
/Proj2
/Tests
/Proj1Tests
/Proj2Tests
/shared
CommonSettings.target
我有一个导入的目标文件,其中包含一系列在产品之间共享的规则和GlobalSupressions:
<Project>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
<PropertyGroup>
<WarningsNotAsErrors>618, 672</WarningsNotAsErrors>
<NoWarn>1701;1702;AD0001;CA5394</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageReference .../>
</ItemGroup>
<ItemGroup>
<Compile Include="..\shared\GlobalSuppressions.cs" Link="GlobalSuppressions.cs" />
</ItemGroup>
</Project>
但是,这对子文件夹中的项目不起作用,因为路径是相对于加载项目的。要使它在那里起作用,我需要'....\shared\CommonSettings.target
如何在子文件夹之间进行此操作?
我可以通过使用$(SolutionDir)在VS中实现这一点,但对于msbuild,我不确定。
2条答案
按热度按时间sqxo8psd1#
查看目录.构建.props和目录.构建.tragets:https://learn.microsoft.com/en-us/visualstudio/msbuild/customize-your-build?view=vs-2022#directorybuildprops-and-directorybuildtargets
zsbz8rwp2#
一般来说,导入的
.props
/.targets
文件的相对路径基于.props
/.targets
文件本身的位置是一个好主意。这样,该路径将独立于导入它的项目的路径,例如:这适用于显式导入的文件和隐式导入的文件,例如
Directory.Build.props
等。注意,那些well-known MSBuild location properties,例如MSBuildThisFileDirectory
通常已经包含一个尾随斜杠。