默认或在外部文件中指定msbuild属性

时间:2013-12-06 01:10:47

标签: msbuild

好的,所以我有几十个解决方案都使用完全相同的命令行构建。

msbuild SolutionName.sln / p:property1 = value1; property2 = value2; etc etc etc.

除了物业数量增长和增长外。

有没有办法指定一个外部文件,我怎么没有最终得到10行msbuild命令? (想想财产100,财产101等)。

我知道.wpp.target文件。但是,必须将它们复制到每个项目文件夹中才是真正的......是我的最后一招。

不,我没有修改任何默认的MSBuild目标/文件。

3 个答案:

答案 0 :(得分:7)

要回答原始问题,是的,您可以在外部文件中指定属性。它们被称为MSBuild响应文件。

msbuild somesolution.sln @PathToResponseFile.rsp

在响应文件中,您可以放置​​属性,每行一个。

/verbosity:detailed
/target:build
/platform:AnyCPU
/configuration=Release

一些更好理解的链接: http://dailytechlearnings.wordpress.com/2011/08/24/msbuild-response-file/ http://msdn.microsoft.com/en-us/library/vstudio/ms404301.aspx

但是,使用msbuild文件构建解决方案和项目是一种更好的解决方案。您可以创建完全按照自己的意愿执行的全局目标。您可以创建自己的自定义清理和构建目标,然后构建/清理您的解决方案。

答案 1 :(得分:6)

首先 - 我建议您使用msbuild脚本来构建解决方案,而不是使用命令行直接构建sln文件。例如。使用这样的东西:

msbuild SolutionName.Build.proj

并且在这个Solution1.Build.proj中你可以放任何像

这样简单的东西
<Project ToolsVersion="4.0" DefaultTargets="BuildMe" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="BuildMe">
        <MSBuild Projects="SolutionName.sln" Properties="property1=value1;property2=value2;"/>
    </Target>
</Project>

在此步骤之后,您可以为构建过程增加灵活性,您可以开始利用MSProild任务的AdditionalProperties元数据。

然后,您可以使用<Import构造将共享属性列表存储在单独的文件和项元数据中,以传递属性值:

<Project ToolsVersion="4.0" DefaultTargets="BuildMe" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="MySharedProperies.props" />
    <ItemGroup>
      <ProjectToBuild Include="SolutionName.sln">
        <AdditionalProperties>SomeProjectSpecificProperty</AdditionalProperties>
      </ProjectToBuild>
    </ItemGroup>

    <Target Name="BuildMe">
        <MSBuild Projects="@(ProjectToBuild)" Properties="@(MySharedProperies)"/>
    </Target>
</Project>

您可以查看此帖子,详细了解properties and additional properties metadatathis original MSDN reference(滚动到“属性元数据”部分)

如果你有任何问题,这是如何做到的基本想法 - 随时问。

答案 2 :(得分:1)

我使用导入文件来处理各种项目中常见的事情。

  <Import Project="CommonBuildProperties.proj"/>

该文件包含一个PropertyGroup,它具有我希望在构建项目中具有相同值的内容。那里还有一个条件语句,根据运行它的计算机的名称设置某些文件夹名称。在运行时,如果我需要在命令行上覆盖任何内容,我就这样做。

我还有一些特定于项目的导入文件(我们的一个版本是一个带有自己的工具集和pecadilloes的Powerbuilder应用程序);导入顺序确保如果它们需要相同元素名称的不同值,我得到我想要的。

我的命令行并不可怕,除非我做一些奇怪的事情,需要覆盖大部分内容。关于我传递的唯一内容是版本号和构建类型(发布或调试)。