如何将不同的构建参数传递给一个解决方案的项目
Posted
技术标签:
【中文标题】如何将不同的构建参数传递给一个解决方案的项目【英文标题】:How to Pass Different Build Arguments to Projects of one Solution 【发布时间】:2016-02-25 02:26:33 【问题描述】:背景:我们有一个包含多个项目的单一 .NET 解决方案,其中一些针对 .NET Framework 编译,一些针对 .NET Core (UWP)。我们使用 Visual Studio Team Services(以前是 Visual Studio Online)来持续构建我们的解决方案。
挑战:UWP 项目需要不同的 MSBuild 参数和平台设置。我们按照下面的屏幕截图创建了一个构建定义:首先使用 .NET 参数构建解决方案。然后,对于每个 UWP 项目,我们都有一个 MSBuild 步骤。
问题:每次添加、删除或重命名 UWP 项目时,我们都必须更新构建定义。我们希望以某种方式自动选择 UWP 项目,理想情况下使用 Visual Studio 构建步骤而不使用自定义脚本。有什么想法吗?
可行的替代方案:最初,我们将解决方案分成两个(每个平台一个解决方案),并针对每个解决方案运行两个不同的 Visual Studio 构建事件。不过,我们更喜欢使用单一解决方案。
【问题讨论】:
【参考方案1】:如果没有自定义脚本,没有任何简单的方法可以实现这一点。
您可以尝试创建一个MSBuild project file 并将您的项目添加到其中,并使用单独的参数,如下所示:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<MSBuild Projects="Project1.csproj" Properties=Arguments1/>
<MSBuild Projects="Project2.csproj" Properties=Arguments2/>
</Target>
</Project>
然后你只需要在你的构建定义中构建项目文件。但这将要求您在添加/更改项目时更新 MSProject 文件。
【讨论】:
【参考方案2】:Msbuild 步骤支持通配符,因此如果您的项目遵循此命名模式,您可以将其设置为 build **/*.uwp.csproj
。
【讨论】:
以上是关于如何将不同的构建参数传递给一个解决方案的项目的主要内容,如果未能解决你的问题,请参考以下文章
如何使 cmake 将 D 参数传递给 ar 以可重现地构建静态库