Visual Studio msbuild导入的文件如何处理不同深度的项目?

ie3xauqp  于 2022-11-30  发布在  其他
关注(0)|答案(2)|浏览(165)

我有一个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,我不确定。

sqxo8psd

sqxo8psd1#

查看目录.构建.props和目录.构建.tragets:https://learn.microsoft.com/en-us/visualstudio/msbuild/customize-your-build?view=vs-2022#directorybuildprops-and-directorybuildtargets

zsbz8rwp

zsbz8rwp2#

一般来说,导入的.props/.targets文件的相对路径基于.props/.targets文件本身的位置是一个好主意。这样,该路径将独立于导入它的项目的路径,例如:

<Compile Include="$(MSBuildThisFileDirectory)GlobalSuppressions.cs" ... />

这适用于显式导入的文件和隐式导入的文件,例如Directory.Build.props等。注意,那些well-known MSBuild location properties,例如MSBuildThisFileDirectory通常已经包含一个尾随斜杠。

相关问题