代码之家  ›  专栏  ›  技术社区  ›  Mafuba

msbuild-设置解决方案的属性

  •  13
  • Mafuba  · 技术社区  · 16 年前

    我们将.NET 3.5与VS2008结合使用。我有一个包含大约20个项目的解决方案,随着应用程序的增长和添加新模块,这个数字将随着时间的推移而增长。今天我需要为每个项目设置一个属性。我必须编辑每个csproj文件以添加以下内容:

      <Target Name="BeforeBuild">
        <CreateProperty Condition=" '$(SolutionDir)' != '' And '$(SolutionDir)' != '*Undefined*' " 
                        Value="$(SolutionDir)Tools\MSBuild">
          <Output TaskParameter="Value" PropertyName="AlToolPath" />
        </CreateProperty>
      </Target>
    

    这是为了使项目能够找到存储在我的源存储库中的程序集链接器(al.exe),以便生成不受机器影响(可以在任何具有.NET的计算机上签出并生成,而无需安装SDK)。解决方案由开发人员使用msbuild在命令行上构建,安装批处理文件、ccnet等。

    不管怎样,我寻找了一种更好的方法来实现这一点(例如解决方案级属性),但找不到。我知道可以在msbuild命令行中设置属性值,但这对我来说并不是很好,因为所有现有和将来的命令行都必须包含它。我还考虑在第一个构建的项目中调用before目标来使用自定义任务来设置环境变量,并在最后一个项目中调用after目标来删除它,但这似乎比单独编辑所有项目文件更为沉重和脆弱。

    请告诉我您是否做过类似的事情,或者知道如何为每个解决方案设置一次属性,使其可供多个项目使用(包括.NET 4/VS2010,我对此没有经验)。请记住,我们使用msbuild来构建SLN文件,而不是单个项目。

    3 回复  |  直到 12 年前
        1
  •  15
  •   Justin R.    16 年前

    可以在单个文件中指定此属性以及所有其他公共属性,并通过在项目文件中包含 Import 声明。这就是我们在构建环境中所做的,构建环境有220个构建项目和多个共享项目文件(例如,“分支”)。它工作得很好。

        2
  •  8
  •   Taras Alenin    12 年前

    我已经实现了 @ FATCAT111 好几次了。这次我用 NuGet - Common.Props .包将在解决方案级别添加一个公共props文件,通过在同一解决方案的多个项目中安装包,可以共享属性。

    代码在 GitHub .

        3
  •  1
  •   Sayed Ibrahim Hashimi    16 年前

    由于解决方案文件不是msbuild文件,因此您将无法执行此类操作。您唯一的选择是处理它或使用主msbuild文件来代替生成解决方案文件。一个选项可以是创建一个特殊的配置,供您的构建过程使用。对于解决方案文件,您可以指定使用的配置。